埋め込まれた関連付けを編集できるフォーム (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
ために をレンダリングできないことです。フォーム ヘルパーを破棄し、html とフィールドの値を手動で管理する以外に、この問題を解決する方法がわかりません。何度もグーグル検索した後でも、このタイプのフォームの例を見つけることができませんでした。Car
truck_field
この問題は、既存のフォーム ヘルパーを使用して標準の「Rails 方式」でどのように解決できますか?