Rails:如何在表中呈现嵌套表单

时间:2016-10-24 08:40:20

标签: ruby-on-rails form-for

例如,我有两个模型:

class Task < ApplicationRecord
   has_many :task_details
end

class TaskDetail < ApplicationRecord
  belong_to :task
end

我想显示一个表,表中的每一行都是一个TaskDetail并允许用户输入。用户提交后,所有数据都将发送到服务器。这是我的代码: (注意:我@data[:task]是一个任务对象,因为我想返回一个包含视图信息的哈希值。

<%= form_for @data[:task], :url => tasks_path do |f| %>
    <table> ... </table>
<% end %>

我的问题是:我怎样才能满足我的要求。

感谢

1 个答案:

答案 0 :(得分:3)

确保您的Task模型具有accepts_nested_attributes_for :task_details,然后您可以执行以下操作...

<%= form_for @data[:task], :url => tasks_path do |f| %>
  <table>
    <tr>
      <th>Task Name</th>
      <th>Task Description</th>
    <tr>
    <%= f.fields_for :task_details do |task_detail| %>
      <tr>
        <%= task_detail.hidden_field :id %>
        <td><%= task_detail.text_field :name %></td>
        <td><%= task_detail.text_field :description %> </td>
      <tr>
    <% end %>
  </table>    
<% end %>

请注意使用隐藏字段:id ...您需要这样,以便rails可以将数据与现有任务区分开来,而不是您正在输入的新任务。

new方法中,您应该确保至少有一个new任务详细信息,以便在表单上提供一个空行来输入详细信息

def new
  ...
  @data[:task].task_details.build
  ...
end