在rails中,您可以在创建新对象时加急关联:
@person = Person.find(params[:id], :include => {:flights => :plane})
但是,我有时已经拥有@person对象,然后想要加载关联。似乎没有任何“轨道”方式来做到这一点。我基本上都在寻找这样的东西:
@person = Person.find(params[:id])
...
@person.include({:flights => :plane})
背景是,我有一个之前的过滤器已经创建了没有关联的@object。但是在某些动作中,如果我不急于加载关联,我将生成大量的单一查询。并且正在做
@person = Person.find(params[:id])
...
@person = Person.find(params[:id], :include => {:flights => :plane})
似乎有点浪费。
答案 0 :(得分:5)
在Rails 2中,您可以使用scoped
创建相应的查询:
@person.flights.scoped(:include => :plane)
在Rails 3中,您可以使用Rails 3 Way:
@person.flights.include(:plane)
您可以考虑在:include
声明中添加has_many
选项,以便在从Person加载时默认包含它:
has_many :flights, :include => :plane
您可以替换为Flight添加默认范围,从而导致Flight上的任何查询都包含其平面:
default_scope :include => :plane
答案 1 :(得分:0)
只需使用@person.flights
并在航班上设置default_scope
即可包含飞机
或者在您的Person模型中:has_many :flights, :include => plane
您应切换到Rails3,查看Active Record Queries in Rails 3以查看原因!