[英]How to iterate over multiple hash values with Espinita in Rails
我正在使用Espinita来跟踪对我的模型所做的更改,并且有多个我想在视图中显示的属性。
我还没有弄清楚如何在不使用||
情况下迭代每个值在迭代器中。 我想获取属性名称、更改的值和日期。
这是 show.html:
<% @contract.contract_information.history_from_audits_for([:contract_title, :assigned_to, :action_requested..:deadline]).each do |changes| %>
<tr>
<%= changes[:contract_title] || changes[:assigned_to] || changes[:deadline] %>
<%= changes[:changed_at].strftime("%m/%d/%Y") %>
</tr>
<% end %>
如何在不引用属性名称的情况下迭代每个审计?
更新
进行建议的更改后。 我现在以数组形式接收属性/值。 有没有办法美化视图中的结果?
输出
11/20/2019 [:contract_stage, ""] [:action_requested, ""] [:reason_for_contract_request, ""] [:existing_or_returning, ""] [:background_check_status, ""] [:priority, ""] [:deadline_date, Wed, 20 Nov 2019] [:commencement_date, Wed, 20 Nov 2019] davie200
看法
<% @contract.contract_information.history_from_audits_for([:contract_stage, :action_requested, :reason_for_contract_request, :deadline_date, :commencement_date, :existing_or_returning, :background_check_status, :priority]).each do |audit| %>
<% audit.except(:changed_at).each do |attribute, value| %>
<tr>
<td><%= audit[:changed_at].strftime("%m/%d/%Y") %></td>
<td>
<% value.each do |val| %>
<%= val %>
<% end %>
</td>
<td><%= @contract.contract_information.audits.last.user.username %></td>
</tr>
<% end %>
<% end %>
如果您有机会在您的项目中更新 Espinita,我建议您这样做,因为它们更改了history_from_audits_for
返回的哈希格式。
在较新的版本中,您将在“ 历史和恢复”文档中看到类似的内容:
model.history_from_audits_for([:name, :settings])
=> [{:changes=>{:name=>"Baz", :settings=>""}, :changed_at=>2015-05-03 15:33:58 -0700},
{:changes=>{:name=>"Arglebargle", :settings=>"IHOP"}, :changed_at=>2015-03-24 15:33:58 -0700},
{:changes=>{:name=>"Walrus"}, :changed_at=>2014-05-13 15:33:58 -0700}]
您的迭代将非常简单:
<% @contract.contract_information.history_from_audits_for([:contract_title, :assigned_to, :deadline]).each do |audit| %>
<% audit[:changes].each do |attribute, value| %>
<tr>
<%= value %>
<%= audit[:changed_at].strftime("%m/%d/%Y") %>
</tr>
<% end %>
<% end %>
但是,如果您没有机会并且使用 Rails > 3.0.0,请考虑以下方法:
<% @contract.contract_information.history_from_audits_for([:contract_title, :assigned_to, :deadline]).each do |audit| %>
<% audit.except(:changed_at).each do |attribute, value| %>
<tr>
<%= value %>
<%= audit[:changed_at].strftime("%m/%d/%Y") %>
</tr>
<% end %>
<% end %>
使用Hash#except
。
从审计中检索用户
<%= @contract.contract_information.audits.last.user.username %>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.