Rails:如何在 table 中呈现嵌套表单
Rails: how to render nested form in table
比如我有两个模型:
class Task < ApplicationRecord
has_many :task_details
end
class TaskDetail < ApplicationRecord
belong_to :task
end
我想显示一个 table,table 中的每一行都是一个 TaskDetail 并允许用户输入。该用户提交后,所有数据将放入服务器。这是我的代码:
(注意:我@data[:task]
是一个任务对象,因为我想return一个带有一些信息的散列以供查看)
<%= form_for @data[:task], :url => tasks_path do |f| %>
<table> ... </table>
<% end %>
我的问题是:如何按照我的要求做。
谢谢
确保您的 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
比如我有两个模型:
class Task < ApplicationRecord
has_many :task_details
end
class TaskDetail < ApplicationRecord
belong_to :task
end
我想显示一个 table,table 中的每一行都是一个 TaskDetail 并允许用户输入。该用户提交后,所有数据将放入服务器。这是我的代码:
(注意:我@data[:task]
是一个任务对象,因为我想return一个带有一些信息的散列以供查看)
<%= form_for @data[:task], :url => tasks_path do |f| %>
<table> ... </table>
<% end %>
我的问题是:如何按照我的要求做。
谢谢
确保您的 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