Rails:如何在一个循环中访问两个模型
Posted
技术标签:
【中文标题】Rails:如何在一个循环中访问两个模型【英文标题】:Rails: How to access two models in a single loop 【发布时间】:2018-02-06 23:30:21 【问题描述】:我正在使用 Audited gem 来跟踪对用户所做的更改。我想要准确显示的是所做的更改,即审核与它们在同一行中更新的时间。我试图以这种方式显示它,但它会重复。
<% @users.each do |user| %>
<% user.audits.each do |audit| %>
<% if audit.action != "create" %>
<% user.revisions.each do |revision| %>
<tr class="list-item">
<td>
<%= user.role %>
</td>
<td>
<%= audit.action %>
</td>
<td>
<%= audit.audited_changes %>
</td>
<td>
<%= revision.created_at %>
</td>
<td>
<%= revision.updated_at %>
</td>
</tr>
<% end %>
<% end %>
<% end %>
<% end %>
我想要的是能够在不显示单个更改多次的情况下显示它们。
我正在寻找像
这样的表达方式for(i=5,j=3;j<5;i++,j++)
....
在rails中,避免重复。谢谢你
【问题讨论】:
【参考方案1】:我以这种方式解决了它,因为审计和修订具有相同数量的元素。我希望它对其他人有所帮助。
<% @users.each do |user| %>
<% user.audits.each_with_index do |audit, i| %>
<% if audit.action != "create" %>
<% user.revisions[i] %>
<tr class="list-item">
<td>
<%= user.role %>
</td>
<td>
<%= audit.action %>
</td>
<td>
<%= audit.audited_changes %>
</td>
<td>
<%=user.revisions[i].created_at %>
</td>
<td>
<%= user.revisions[i].updated_at %>
</td>
</tr>
<% end %>
<% end %>
<% end %>
【讨论】:
【参考方案2】:你也可以试试zip:
user.audits.zip(user.revisions) do |audit, revision|
【讨论】:
以上是关于Rails:如何在一个循环中访问两个模型的主要内容,如果未能解决你的问题,请参考以下文章