繁体   English   中英

渴望加载条件关联

[英]Eager loading conditional associations

我有以下课程:

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)这将加载帖子,并急于加载validated_comments关联,该关联仅包含已批准的注释。

找到它,忘记在选择中选择外键car_id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM