activerecord - 如何获取连接表的所有列

hey*_*ike 12 activerecord ruby-on-rails

看完之后:这个

我还是不明白.在控制台中:

puts Category.joins(:posts)
Run Code Online (Sandbox Code Playgroud)

它在Category和Post上执行join或left join.

但是,返回的所有数据只是Category表中的列.如何在Post中获取这些列数据.?

我应该制作另一个模型来实现这个目标吗

看完之后: 是find_by_SQL唯一的方法吗?如果可能,我想要ActiveRecord方式.

谢谢.

Ine*_*neu 6

你可以尝试select()方法:

Category.select("categories.*, posts.*").joins(:posts)
Run Code Online (Sandbox Code Playgroud)


abh*_*hek 4

您可以通过进一步查询来获取 posts 表中的列,例如 -

Category.joins(:posts).collect{|category| category.posts.map{|post| post.attributes.merge(category.attributes) } }
Run Code Online (Sandbox Code Playgroud)

这将为您提供一个针对每个类别合并在一起的帖子和类别属性的巨大列表。

但对类别进行连接的目的是获取一组遵循特定连接标准的类别。如果我们采用同一指南中的下一个示例,

Post.joins(:category, :comments)
Run Code Online (Sandbox Code Playgroud)

这也只为您提供一个帖子列表,但该列表仅包含遵循连接约束的帖子,即它们都有一个类别和一条评论。

  • 请注意,“collect”可能会导致 N+1 查询问题。为了避免这种情况,请使用“includes”。请参阅 [关于预加载的 RoR 指南](http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations) (3认同)