I am working on a form (using SimpleForm) that allows editing inline associations. The problem I am facing is that nested models are subclasses, so they are different types with potentially different fields. I create hidden forms for each type of model and using JavaScript to display the forms for the selected type.
FYI, I use the following stones:
- Rails 3.2
- Mongoid
- Simpleform
Here is a simplified example of what I still have:
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
In the console:
> garage = Garage.new > garage.vehicle = Car.new(car_field: 'something') > garage.save!
In the shape of:
= 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()
The problem that will arise in this example is that it will not be able to display truck_field because Car does not have a truck_field method. I am not sure how to solve this problem, besides pulling out any form helpers and managing the html and field values ββmanually. Even after a lot of Googling, I could not find examples of this type of form.
How can this problem be solved in standard "Rails" mode using existing form helpers?
source share