7

データベースから車のインスタンスを取得しようとしましたが、

theCar = Car.where(:name => 'TOYOTA')
puts theCar.user_name

次のエラー メッセージが表示されました: ActiveRecord::Relation:0xb6837b54 の未定義のメソッド `user_name'

CarオブジェクトではなくActiveRecord::Relationオブジェクトを取得したのはなぜですか?? 原因は何ですか?ちなみに、移行ファイル内で車にクエリを実行しました。Rails3を使用しています。

4

1 に答える 1

18

遅延読み込みを使用しているため、取得できます。特定のオブジェクトを呼び出す前に、何もロードされません。

実際のところ、クエリはオブジェクトの配列を返します: TOYOTA という名前のすべての車。この名前の CAR が 1 つしかないことがわかっている場合は、次のようにできます。

theCar = Car.where(:name => 'TOYOTA').first
# or
theCar = Car.first(:name => 'TOYOTA')
# or
theCar = Car.find_by_name('TOYOTA')

TOYOTA という名前の車がたくさんある場合:

theCars = Car.where( :name => "TOYOTA" ).all
theCars.map(&:user_name)
#=> ["Jhon", "Paul" ...]
于 2011-04-01T08:52:16.367 に答える