2

我有一个看起来像这样的模型:

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#answer Integer() 中的 ArgumentError 无效值:“{:conditions=>[\”id > ? AND level_id = ?\""

我不知道如何解决这个问题。Rails 更新可能是造成这个问题的原因吗?我在另一个应用程序中有完全相同的方法,并且仍然有效。

4

4 回答 4

4

firstRails 4 改变了这种方法。

在 Rails 3.2 之前,它会接受条件参数,并且您的实现会起作用。这是原始文档,请注意它*args在使用它们之前如何检查类型。

在 Rails 4 中,该方法发生了变化(docs),现在它只接受整数限制。

你应该更新你的实现:

def next
  Question.where('id > ? AND level_id = ?', id, level_id).order(id: :asc).first 
end
于 2014-04-30T15:46:42.417 回答
1

试试这个:这应该工作

Question.where("id > ? AND level_id = ?", id, level_id).order("id asc").first
于 2014-04-30T15:26:38.613 回答
0

尝试将其更改为

Question.where('id > ? AND level_id = ?', self.id, self.level_id).order(id: :asc).first
于 2014-04-30T15:25:50.163 回答
0

文档中,该first方法采用整数,而不是字符串。

我也不记得它曾经使用过字符串,因为方法描述表明它返回前 N 条记录。也许在您进行更新并进行其他一些更改之前,从未调用过该特定方法。

您可以使用该where方法,该方法采用您的条件,然后用于first获得第一个结果。

Question.where(:conditions => ['id > ? AND level_id = ?', self.id, self.level_id], :order => 'id ASC').first
于 2014-04-30T15:27:45.963 回答