2010-01-21 79 views
5

我在其中一个专属于哪个inturn属于国家像城里的关系:的读取与轨道的活动记录第二级模型

class Post < ActiveRecord::Base 
    belongs_to :city 
end 
class City < ActiveRecord::Base 
    belongs_to :state 
end 

现在我想找到沿着所有职位的他们城市和属于的国家。我写了下面的查询来获取与他们的城市的帖子,但没有想法如何取得在同一个发现者与城市的相应状态:

@post = Post.find:all,:include => [:城市]

任何帮助表示赞赏。

谢谢。

回答

9
Post.all(:include => { :city => :state }) 
4

Rails将为您处理此问题,这要归功于belongs_to关系,此信息会自动提取。

@posts = Post.find(:all) 

@posts现在包含逻辑为所有回报的职位取citycity.state细节。

如果你打算使用所有这些细节你应该贪婪加载他们,:include => { :city => :state }Farrel和mckeed说明。

注:使它工作的其他方式(它也应该很好的模式定义的行为),你应该添加has_manyhas_one协会为好。请参阅Association Basics Guide

+0

正如你的链接所解释的,如果你打算访问所有相关的记录,你应该像Farrel的回答那样用':include'来加载它们。否则,当你循环访问'@ posts'时,每次你询问帖子的城市或州时,它都会执行另一次数据库提取,导致代码更慢。 – mckeed

+0

你完全正确,谢谢指出。我已经用这些信息更新了答案。 – Veger