0

私はこのモデルを持っています

class Contestcode < ActiveRecord::Base
  attr_accessible :code, :used

  def self.is_valid(code)
    valid = false
    contestcode = Contestcode.where('code = ?', code)
    Rails.logger.debug("My object: #{contestcode.inspect}");
    if (contestcode)
      valid = contestcode.used
    end
    valid
  end
end

実行しようとすると、次のself.is_validエラーが発生します。

undefined method `used' for #<ActiveRecord::Relation:0x007ff525fde1a8>

デバッグ ステートメントの出力は次のとおりです。

My object: [#<Contestcode id: 1, code: "aaaaa", used: false, created_at: "2013-01-23 10:21:32", updated_at: "2013-01-23 10:21:32">]

コンテストコードの使用済みプロパティを取得するにはどうすればよいですか?

4

1 に答える 1

2

Contestcode.whereコンテストコードのコレクションを返します。あなたの場合、code探しているのは (願わくば!) 一意であるため、見つかった場合は 1 アイテム、見つからなかった場合は 0 アイテムのコレクションになります。

これは、デバッグ ステートメントで確認できます。オブジェクトが配列内にあることを示す角かっこに注意してください (実際には、ActiveRecord::Relationクエリを連鎖させることができますが、ほとんどの場合は配列のように動作します)。

ここで本当に必要なのはContestcode.where(...).firstで、見つかった場合は配列から Contestcode を抽出し、見つからnilなかった場合はそれを返します。

于 2013-01-23T11:41:52.787 に答える