通过Rails使用查询has_many

时间:2019-01-29 10:04:27

标签: ruby-on-rails ruby-on-rails-5

我有3个模型,

文章

belongs_to :category
belongs_to :author

作者

has_many :articles
has_many :categories, through: :articles

类别

has_many :articles
has_many :authors, through: :articles

这就是我想做的

  

author / show.html.erb

<h5>Recent Articles</h5>
<table>
 <thead>
  <tr>
   <th>Judul Artikel</th>
   <th>Kategori</th>
  </tr>
 </thead>
 <tbody>
  <% Article.all.each do |author| %>
   <tr>
    <td><%= author.judul_artikel %></td>
    <td><%= author.category.nama_kategori %></td>
   </tr>
  <% end %>
 </tbody>
</table>

我想做的是在表中显示author / id时,仅显示存在ID的类别和文章。

我不知道如何在这里使用查询

2 个答案:

答案 0 :(得分:0)

假设您想要的是与该作者相关的文章:

使用Hash conditions,您可以将“文章”模型更好地划分为与作者相关的文章:

<% Article.where(author_id: @author.id).each do |author| %>
  <tr>
   <td><%= author.judul_artikel %></td>
   <td><%= author.category.nama_kategori %></td>
  </tr>
<% end %>
  

但是有更好的解决方案。由于您使用的是show操作,因此应该传递一个实例变量(例如@author)。然后可以将其关联方法用作对象@author.articles

<% @author.articles.each do |author| %>
  <tr>
   <td><%= author.judul_artikel %></td>
   <td><%= author.category.nama_kategori %></td>
  </tr>
<% end %>
  

答案 1 :(得分:0)

您可以尝试以下操作

<% @author.articles.each do |article| %>
  <tr>
   <td><%= article.judul_artikel %></td>
   <td><%= article.category.nama_kategori %></td>
  </tr>
<% end %>