如何在一个表单中编辑多个模型?

时间:2012-10-31 05:50:59

标签: ruby-on-rails ruby scaffolding

我的训练师得到了一项任务。我想在一个表单中编辑两个模型。 例如,我们有两个实体学生和地址。在新学生部分,我想添加学生的详细信息和地址。我怎样才能通过铁轨上的红宝石脚手架实现这一目标?

3 个答案:

答案 0 :(得分:7)

您可以使用accepts_nested_attributes_forfields_for构建表单以同时创建两个模型,因此您也可以编辑它们。这种形式称为nested form

以下是Nested form,。

的参考资料

答案 1 :(得分:0)

我们可以像这样编辑多个模型..

学生中的

/ edit.rhtml

编辑学生

 <%= error_messages_for :student %>

 <%= start_form_tag :action => 'update', :id => params[:id] %>


 <p>
  Student Name:
  <%= text_field :student, :name %>
  </p>

 <h2>Address</h2>
  <% for @address in @student.addresses %>
  <%= error_messages_for :address %>
  <% fields_for "address[]" do |f| %>
  <p><%= f.text_field :name %></p>
  <% end %>
  <% end %>

 <p><%= submit_tag 'Update' %></p>
  <%= end_form_tag %>

答案 2 :(得分:0)

我不确定脚手架,但可以通过使用form_tag而不是form_for来实现预期的行为。

<%= form_tag :url => , :html => {:id=> , :method => , :class => ""} do %>
  <% text_field_tag <id>, <default_value>, :name=>"student[name]" %>
  <% text_field_tag <id>, <default_value>, :name=>"student[age]" %>
  <% text_field_tag <id>, <default_value>, :name=>"address[street]" %>
  <% text_field_tag <id>, <default_value>, :name=>"address[city]" %>
  <% text_field_tag <id>, <default_value>, :name=>"address[state]" %>
  <% text_field_tag <id>, <default_value>, :name=>"address[country]" %>
  <%= submit_tag 'save' %>
<% end %>

然后将params很好地分组为像

这样的哈希
{'student' => {'name' => , 'age' => }, 'address' => {'street' => , 'city' =>  . . .}} 

您可以解析以更新两个模型