模型:
#StatusMessage model
class StatusMessage < ActiveRecord::Base
belongs_to :users
default_scope :order => "created_at DESC"
end
#User Model
class User < ActiveRecord::Base
has_many :status_messages
end
在控制器中我想加入这两个表并从两个表中获取字段。例如,我希望来自email
的{{1}}字段和来自User
的{{1}}字段。当我使用时:
status
或者
StatusMessage
它只给我用户表数据。
如何实施此要求?
答案 0 :(得分:6)
您需要在此处使用includes
。它会预加载数据,因此当您执行@user.status_messages
时,您将不会有另一个SQL查询。
是的,你无法真正看到效果:你需要检查你的日志。
答案 1 :(得分:2)
首先,我不认为你想做什么(和合理)。原因是User
和StatusMessage
之间的关系是1:n,这意味着每个用户可能有0到n个状态消息。这些众多属性应该如何包含在您的用户模型中?
我认为ActiceRecord类中的方法joints
具有不同的含义,它是query interface的一部分。请参阅问题LEFT OUTER joins in Rails 3
网上有类似的问题,这是我发现最匹配的问题:
@user.primary_status_message.status
答案 2 :(得分:1)
当你使用@status = User.includes(:status_messages)时,rails eagerley会加载所有表的数据。
我的观点是,当您使用此User.includes(:status_messages)时,它还会加载status_messages的数据,但只显示用户表数据,那么如果您想要第一个用户status_messages,则必须使用@ user.first.status_messages