在 Rails 中使用嵌套表单 - 如何使显示页面根据用户想要的呈现数量以表格格式显示每个新条目?

Posted

技术标签:

【中文标题】在 Rails 中使用嵌套表单 - 如何使显示页面根据用户想要的呈现数量以表格格式显示每个新条目?【英文标题】:Using nested forms in Rails - How can I make the show page display every new entry in a table format depending on how many presents the user wants? 【发布时间】:2012-06-16 04:20:42 【问题描述】:

我有一个正在使用 Rails 3.2 构建的婴儿礼物注册表。有一个注册模型和一个嵌套在注册模型下的当前模型。除显示页面外,一切都 100% 正常运行。

当用户创建注册表时,他/她可以通过添加礼物标签添加礼物(他/她想要多少),但问题是在显示页面中它只显示第一个礼物,因为我也想要它.其余部分以纯非格式化文本显示。

有什么帮助吗?我希望它以表格格式显示。

这是我的代码: 这是注册表:

<%= nested_form_for(@registry) do |f| %>
<% if @registry.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@registry.errors.count, "error") %> prohibited this registry from    
being saved:</h2>

  <ul>
  <% @registry.errors.full_messages.each do |msg| %>
    <li><%= msg %></li>
  <% end %>
  </ul>
</div>
<% end %>


<%= f.label :due_date %><br />
<%= f.date_select :due_date, :rows => 5 %>


<%= f.label :theme %><br />
<%= f.text_field :theme, :class => 'field2' %>

<div class="field1">
<%= f.label :gender %><br />
<%= f.text_field :gender %>
</div>

<div class="field1">
<%= f.fields_for :presents do |builder| %>
<%= render 'present_fields', f: builder %>
<% end %>
</div>

<%= link_to_add_fields "Add Presents", f, :presents %>

<div class="actions">
<%= f.submit %>
</div>
<% end %>

presents_fields:

<div class="field1">
<table>
<tr> 
<td> <%= f.label :type, "Present Type" %> </td>
<td> <%= f.text_field :type, :class => 'field2' %> </td>
<td> <%= f.label :Quantity, "Quantity" %> </td>
<td> <%= f.number_field :quantity, :class => 'field3' %> </td>
<td> <%= f.label :color, "Color" %> </td>
<td> <%= f.text_field :color, :class => 'field2' %> </td>
<td> <%= f.label :brand, "Brand" %> </td>
<td> <%= f.text_field :brand, :class => 'field2' %> </td>
<td> <%= f.link_to_remove "Remove this present" %></td>
</tr>
</table>
</div>

展示页面:

<p> Baby & Party Details: </p></br>
<li><p> Due date: </p> <%= @registry.due_date %></li></br>
<li><p> Party Theme: </p><%= @registry.theme %></li></br>
<li><p> Gender: </p><%= @registry.gender %></li></br>

<p> Presents Registry: </p></br>
<li>

<% @registry.presents.each do |registry| %>

<%= registry.type %>
<%= registry.quantity %>
<%= registry.color %>
<%= registry.brand %>

</li>

<% end %>

</br>
</br>
<%= link_to 'Edit', edit_registry_path(@registry) %>
<%= link_to 'Back', registries_path %>

【问题讨论】:

我相信这也是一个错字。您将迭代代码放在 内,并在 之外结束循环。 【参考方案1】:
<li>

<% @registry.presents.each do |registry| %>

这些线不应该倒过来吗?

<% @registry.presents.each do |registry| %>
<li>

【讨论】:

你问的是列宽吗?如果是这样,有几种方法可以做到 - 例如检查***.com/questions/928849/setting-table-column-width

以上是关于在 Rails 中使用嵌套表单 - 如何使显示页面根据用户想要的呈现数量以表格格式显示每个新条目?的主要内容,如果未能解决你的问题,请参考以下文章

Rails 嵌套表单提交但不持久化数据

如何使下拉表单在 Ruby On Rails 中工作

Rails:嵌套的远程表单在页面加载时不起作用

jQuery触发嵌套表单rails cocoon上的所有实例

如何在rails中禁用嵌套表单的服务器端验证

Rails fields_for 表单未显示,嵌套表单