在Rails更新4.1.0之后,下一个方法(Class.first)不起作用

时间:2014-04-30 15:15:56

标签: ruby-on-rails ruby ruby-on-rails-4 where argument-error

我的模型看起来像这样:

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更新导致此问题?我在另一个应用程序中使用完全相同的方法,但仍然有效。

4 个答案:

答案 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