ActiveRecord在连接后选择多个表中的所有列

时间:2018-02-02 06:32:43

标签: ruby-on-rails activerecord

我有两个模型NAME BRANCH ---- ------ AK 01 ML 01 JN 01 03 02 04 Article - :id, :name, :handle

我的查询看起来像Comment - :id, :name, :article_id

现在两个模型都有冲突的字段。理想情况下,我希望能够执行data = Article.select("articles.*, comments.*").joins("INNER JOIN comments on articles.id = comments.article_id")data.first.comments.name

之类的操作

注意我知道像data.first.articles.name这样的选项,但我有一些约20列的表格。所以不要这样做。

1 个答案:

答案 0 :(得分:0)

您展示的示例几乎没有使用Rails框架。看起来你正在考虑很多数据库结构,而不是把结果看作Ruby对象。

以下是我建议您访问数据的内容(因为您使用的是Rails,我认为它适用于网页,因此我的示例是用于呈现html.erb模板):

# In controller
@articles = Article.includes(:comments)

# In views
<% @articles.each do |article| %>
  <h1><%= article.name %></h1>

  <% article.comments.each do |comment| %>
    <p><%= comment.name %></p>
  <% end %>
<% end %>

但是,如果您只想将所有列数据转换为大数组或数组(数据库样式),您可以这样做

rows = Article.includes(:comments).inject([]) { |arr, article|
  article.comments.inject(arr) { |arr2, comment|
    arr2 << (article.attributes.values + comment.attributes.values)
  }
}

如果你不知道注入方法是如何工作的,我真的建议你阅读它,因为它是一个非常有用的工具。