我想我也有类似的问题,但是不是has_one
关系,我有has_many
.
基本上我用过cocoon
gem 为每个修饰类动态添加字段(例如Car
or Truck
) 然后我accept_nested_attributes_for :vehicle
。表单是动态构建的,提交时,参数会进入内部vehicle_attributes
.
代码看起来像(更新为has_one
协会):
# _form.html.haml
= simple_form_for @garage, :html => { :multipart => true } do |f|
= f.simple_fields_for :vehicles do |vehicle|
= render 'vehicle_fields', :f => item
= link_to_add_association 'Add a Car', f, :vehicles, :wrap_object => Proc.new { |vehicle| vehicle = Car.new }
= link_to_add_association 'Add a Truck', f, :vehicles, :wrap_object => Proc.new { |vehicle| vehicle = Truck.new }
= f.button :submit, :disable_with => 'Please wait ...', :class => "btn btn-primary", :value => 'Save'
然后里面_vehicle_fields
部分你检查它是什么对象(Car
or Truck
)并且您呈现正确的字段。
我认为这个效果非常好,并且正是我所需要的。希望能帮助到你。
我在以下位置写了更长的解释:http://www.powpark.com/blog/programming/2014/05/07/rails_nested_forms_for_single_table_inheritance_associations