我的模型看起来像这样:
class Question < ActiveRecord::Base
belongs_to :level
def next
Question.first(:conditions => ['id > ? AND level_id = ?', self.id, self.level_id], :order => 'id ASC')
end
end
这非常好用,直到我通过rails更新到4.1.0版本。 现在我收到了这个错误:
QuestionsController中的ArgumentError#回答无效值 整数():&#34; {:conditions =&gt; [\&#34; id&gt; ? AND level_id =?\&#34;&#34;
我无法弄清楚如何解决这个问题。是否可能是rails更新导致此问题?我在另一个应用程序中使用完全相同的方法,但仍然有效。
答案 0 :(得分:4)
使用Rails 4改变了方法first
。
直到Rails 3.2,它会接受条件参数,并且您的实现将起作用。这是original documentation,注意它在使用之前如何检查*args
的类型。
在Rails 4中,方法已更改(docs),现在它只接受整数限制。
您应该使用以下方式更新您的实施:
def next
Question.where('id > ? AND level_id = ?', id, level_id).order(id: :asc).first
end
答案 1 :(得分:1)
试试这个:这应该有效
Question.where("id > ? AND level_id = ?", id, level_id).order("id asc").first
答案 2 :(得分:0)
尝试将其更改为
Question.where('id > ? AND level_id = ?', self.id, self.level_id).order(id: :asc).first
答案 3 :(得分:0)
从documentation开始,first
方法采用整数,而不是字符串。
我不记得它曾经带过一个字符串,因为方法描述表明它返回前N个记录。也许在您进行更新并进行其他一些更改之前,从未调用过该特定方法。
您可以使用符合条件的where
方法,然后使用first
获取第一个结果。
Question.where(:conditions => ['id > ? AND level_id = ?', self.id, self.level_id], :order => 'id ASC').first