0

私は次のクラスを持っています:

class Car < ActiveRecord::Base

  has_many  :adverts, :dependent => :destroy
  has_many  :active_adverts, :class_name => 'Advert', :select => "adverts.id, adverts.availability_state, adverts.source_name, adverts.last_observed_at", :conditions => "availability_state = 'active'"

end

実行すると:cars = Car.where(:brand => 'BMW').includes(:adverts)正常に動作し、要求した車の配列が返され、広告が正しく熱心に読み込まれます。

どうすれば:cars = Car.where(:brand => 'BMW').includes(:active_adverts)予想されるクエリを実行するように見えますが、ActiveRecord::Relationオブジェクトが返され、尋ねると次のようcars.firstになります:

NoMethodError: undefined method `each' for nil:NilClass
from /Users/nk/.rvm/gems/ruby-1.9.3-p194@au/gems/activerecord-3.2.13/lib/active_record/associations/preloader/association.rb:88:in `block in associated_records_by_owner'

私は何を間違っていますか?

PS。私は彼女のアドバイスに従いました: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

それが述べているところ:

アソシエーションの一部のメンバーのみを積極的に読み込みたい場合は、通常、条件が定義されているアソシエーションを含める方が自然です。

class Post < ActiveRecord::Base
  has_many :approved_comments, :class_name => 'Comment', :conditions => ['approved = ?', true]
end

Post.includes(:approved_comments) これは、投稿を読み込み、承認されたコメントのみを含むapproved_comments関連付けを熱心に読み込みます。

4

1 に答える 1

0

見つけました、選択で外部キーを選択するのを忘れましたcar_id

于 2013-05-24T09:50:06.697 に答える