我正在开发一个允许您编辑嵌入式关联的表单(使用 SimpleForm)。我遇到的问题是嵌套模型是子类,因此它们是具有潜在不同字段的不同类型。我正在为每种类型的模型创建隐藏表单,并使用 JavaScript 显示所选类型的表单。
仅供参考,我正在使用以下宝石:
- 导轨 3.2
- 蒙古族
- 简单的模式
这是我到目前为止的一个简化示例:
class Garage
include Mongoid::Document
embeds_one :vehicle
accepts_nested_attributes_for :vehicle
end
class Vehicle
include Mongoid::Document
embedded_in :garage
attr_accessible :_type
end
class Car < Vehicle
field :car_field
attr_accessible :car_field
end
class Truck < Vehicle
field :truck_field
attr_accessible :truck_field
end
在控制台中:
> garage = Garage.new
> garage.vehicle = Car.new(car_field: 'something')
> garage.save!
在表格中:
= simple_form_for @garage do |f|
= f.input :vehicle do |vehicle_form|
= vehicle_form.input :_type, collection: ['Car', 'Truck']
%span.hide{data:{fields-for:'Car'}}
= vehicle_form.input :car_field
%span.hide{data:{fields-for:'Truck'}}
= vehicle_form.input :truck_field
:coffeescript
$('#garage_vehicle_attributes__type').change ->
type = $(@).find('option:selected').val()
$('[data-fields-for="' + type + '"]').show()
这个例子中会出现的问题是它不能渲染,truck_field
因为Car
没有truck_field
方法。除了抛出任何表单助手并手动管理 html 和字段值之外,我不确定如何解决这个问题。即使经过大量谷歌搜索,我也无法找到这种形式的任何示例。
如何使用现有的表单助手以标准的“Rails 方式”解决这个问题?