mko*_*kon 4 activerecord ruby-on-rails
在rails中,您可以在创建新对象时急切加载关联,如下所示:
@person = Person.find(params[:id], :include => {:flights => :plane})
Run Code Online (Sandbox Code Playgroud)
但是,我有时已经拥有@person对象,然后想要加载关联.似乎没有任何"轨道"方式来做到这一点.我基本上在寻找这样的东西:
@person = Person.find(params[:id])
...
@person.include({:flights => :plane})
Run Code Online (Sandbox Code Playgroud)
背景是,我有一个前置过滤器,已经创建了没有关联的@object.但是在某些动作中,如果我不急于加载关联,我将生成大量的单一查询.并做
@person = Person.find(params[:id])
...
@person = Person.find(params[:id], :include => {:flights => :plane})
Run Code Online (Sandbox Code Playgroud)
看起来有点浪费.
在Rails 2中,您可以使用scoped创建适当的查询:
@person.flights.scoped(:include => :plane)
Run Code Online (Sandbox Code Playgroud)
在Rails 3中,你可以使用Rails 3方式:
@person.flights.include(:plane)
Run Code Online (Sandbox Code Playgroud)
您可以考虑在声明中添加:include选项,has_many以便在从Person加载时默认包含该选项:
has_many :flights, :include => :plane
Run Code Online (Sandbox Code Playgroud)
您可以替换为Flight添加默认范围,从而导致Flight上的任何查询都包含其平面:
default_scope :include => :plane
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2127 次 |
| 最近记录: |