我有两个模型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列的表格。所以不要这样做。
答案 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)
}
}
如果你不知道注入方法是如何工作的,我真的建议你阅读它,因为它是一个非常有用的工具。