Rails:渲染嵌套表单

时间:2014-05-13 19:39:12

标签: ruby-on-rails-4 partials

我有一个很好的巢形式。表单基本上是具有地址的客户。 我试图在客户和地址级别呈现部分,以指示谁创建了每条记录,谁是最后一个更新记录的人。

我的观看代码是:

<%= form_for(@customer) do |f| %>
  <%= render 'cust_fields', f: f %>
  <%= render 'layouts/audit', audit: @customer %>
  <strong>ADDRESSES:</strong>
  <hr />
  <%= f.fields_for :addresses do |a| %>
    <%= render "address_fields", f: a %>
    <%= render 'layouts/audit', audit: :addresses %>
  <% end %>
<% end %>

相关代码是&lt;%= render&#39; layouts / audit&#39;,audit :: address%&gt;

这引发了错误:

undefined method `created_by' for :addresses:Symbol

我试图将地址更改为@ customer.addresse,但这也不起作用。为什么呢?

我的部分代码是:

<% created_user = User.find(audit.created_by) %>
<% updated_user = User.find(audit.updated_by) %>
<div class="row audit-info">
  <small>
  <div class="pull-left">
    Created by: <%= created_user.name %>
  </div>
  <div class="pull-right">
    Last updated by: <%= updated_user.name %>
  </div>
  </small>
</div>

客户和地址表都包含created_by和updated_by列。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

我能够通过在我的视图中引入以下代码来实现这一目标:

<% for i in 1..@customer.addresses.size %>
    <%= f.fields_for @customer.addresses[i-1] do |a| %>
      <%= render "address_fields", f: a %>
      <%= render 'layouts/audit', audit: @customer.addresses[i-1] %>
    <% end %>
<% end %>

答案 1 :(得分:0)

实际上,由于我对儿童记录进行了重复计算,因此上述措施无效。 做了什么工作(经过一些更多的研究之后)如下:

<%= f.fields_for :addresses do |a| %>
  <div class="deleterow">
    <%= render "address_fields", f: a %>
    <%= render 'layouts/audit', audit: @customer.addresses[a.index] %>
  </div>
<% end %>

关键是使用a.index,可以在第4行看到。