【问题标题】:ActiveRecord not reading method parameters correctlyActiveRecord 未正确读取方法参数
【发布时间】:2014-07-07 22:39:20
【问题描述】:

我在 Sinatra 项目中遇到了一些非常奇特的结果。

一切正常,然后今天早上我的 ActiveRecord 调用开始出现错误。

我的第一个电话是从我的国家表中随机获取一行

这失败了:

@randomCountry = Country.where( "name != ?", @countryName ).first( :order => "RANDOM()" )

出现以下错误:

can't convert Hash into Integer

如果我省略 :order,我不会收到错误消息,所以这可行:

@randomCountry = Country.where( "name != ?", @countryName ).first()

但显然不理想,因为它不再是随机的!

然后再往下一点,我得到一个完整的国家列表,如下所示:

@countriesList = Country.find(:all, :order => "name")

以下错误:

Couldn't find all Countries with 'code': (all, {:order=>"name"}) (found 0 results, but was looking for 2)

如果我按名称省略订单:

@countriesList = Country.find(:all)

我收到此错误:

Couldn't find Country with 'code'=all

我的国家有一个 code 的主键,但我以前可以毫无问题地拨打这个电话。

非常感谢尝试调试此问题的任何帮助,如果需要,我可以发布更多详细信息。

【问题讨论】:

标签: ruby activerecord sinatra


【解决方案1】:

如果您使用的是任何最新版本的 AR,请尝试:

Country.where("name != ?", @countryName).order('RANDOM()').first
# If you're using AR 4 you can do:
# Country.where.not(name: @countryName).order('RANDOM()').first

Country.order('name').all

【讨论】:

  • 感谢@kardeiz,这解决了我的问题。知道为什么这可能会停止工作吗?我没有在我的 Gemfile 中明确设置 AR 版本,旧语法可能在恶意捆绑后变得不受支持?
  • 另外,最新的稳定版 AR 是什么?所以我可以明确地设置它。
  • @jolyonruss,看起来对 AR#find(:all) 和类似的支持在 3.2 中被删除了。我相信 Rails(和 ActiveRecord)的最新稳定版本是 4.1.4。
  • 谢谢 - 我已经锁定了以下gem "activerecord", "4.0.2"
猜你喜欢
  • 1970-01-01
  • 2014-10-22
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
  • 2020-10-22
  • 1970-01-01
  • 2018-06-14
  • 1970-01-01
相关资源
最近更新 更多