我正在编写一个使用formtastic来管理业务单元模型的表单,但是在创建新的业务单元时,它还必须创建许多其他记录类型。模型之间的关联如下:
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作为联接表来创建Site。此外,还应该创建一个位置记录,该记录必须保存新站点记录的外键,而这正是我遇到问题的地方。
我可以使用嵌套表单创建一个新位置(如下),但必须手动创建网站。
<%= 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、Site记录并确保Location持有新建Site的外键的最佳方法是什么?
您可能想对表单中的子对象使用"fields_for
"方法。
请参阅以下相关答案:Rails表单中的多个对象
有关字段的更多信息:
http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html
http://apidock.com/rails/ActionView/Helpers/FormHelper/fields_for