Rails在单个表单上更新多个模型

时间:2011-06-07 16:57:43

标签: ruby-on-rails ruby-on-rails-3 activerecord foreign-keys

我正在编写一个使用formtastic来管理BusinessUnit模型的表单,但是在创建新的BusinessUnit时,它还必须创建许多其他记录类型。模型之间的关联如下:

class BusinessUnit < ActiveRecord::Base
  has_many :business_unit_sites
  has_many :locations

class BusinessUnitSite < ActiveRecord::Base
  belongs_to :site
  belongs_to :business_unit

class Site < ActiveRecord::Base
  has_many :locations
  has_many :business_unit_sites

class Location < ActiveRecord::Base
  belongs_to :business_unit
  belongs_to :site 

创建BusinessUnit时,还必须使用BusinessUnitSite作为连接表创建站点。此外,还应创建一个位置记录,该记录必须包含新站点记录的外键,这是我遇到问题的地方。

我可以使用嵌套表单(下方)创建新位置,但必须手动创建网站。

<%= semantic_form_for @business_unit do |f| %>
  <%= f.inputs do %>
    <%= f.input :name %>
    <%= f.input :business_unit_id %>
    <%= f.input :business_unit_group, :include_blank => false %>
    <%= f.input :business_unit_type %>
    <%= f.input :tax_region, :include_blank => false %>
    <%= f.semantic_fields_for :locations do |l| %>
      <%= l.input :name, :label => "Location Name" %>
    <% end %>
  <% end %>
  <%= f.buttons %>
<% end %>

创建位置,站点记录并确保Location保存新创建的站点的外键的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

您可能希望对表单中的子对象使用“fields_for”方法。

见相关答案: Multiple objects in a Rails form

有关fields_for的更多信息:

http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html

http://apidock.com/rails/ActionView/Helpers/FormHelper/fields_for