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 の ArgumentError Integer() の無効な値: "{:conditions=>[\"id > ? AND level_id = ?\""

これを修正する方法がわかりません。レールの更新がこの問題の原因である可能性はありますか? 別のアプリケーションにもまったく同じ方法があり、その方法は引き続き機能します。

4

4 に答える 4

4

Rails 4 で方法firstが変わりました。

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

documentationから、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 に答える