I met a problem with nested_form gem.
I have 5 models: Category, Group, Parameter, Offer and Value.
So Offers belongs to Category, Values belongs to Offers and Parameters, Parameters are united in Groups, and Groups belongs to Category.
Typical example is like
Category: car
Group: engine parameters
Parameter: volume
Parameter: power
Group: producer
Parameter: producer_name
Parameter: year
Parameter: country
Category: bicycle
Group: technical parameters
Parameter: wheel diameter
Parameter: weight
Group: producer
Parameter: producer_name
Parameter: year
Parameter: country
And values of this parameters belongs to offers. Maybe looks complicated, but it seems to me I illustrated it quite clearly.
I want to build form, which allows to create many Offers during user registration. Categories, parameters and groups are fixed.
Now my template is:
= simple_nested_form_for @user
Category.all.each do |category|
span= category.name
= f.simple_fields_for :offers do |f_offer|
= f_offer.input :category_id, :as => :hidden
- category.groups.each do |group|
span= group.name
- if f_offer.object.values.where("parameter_id IN (?)", group.parameters).empty?
- group.parameters.each do |parameter|
- variant.values.build(:parameter_id => parameter.id)
/ In this partial inputs for offer values in format parameter_name: input_field
= render :partial => 'values', :locals => { :f_offer => f_offer,
:f_group => group }
= f_variant.link_to_remove t("views.remove_variant")
= f.link_to_add "Add offer", :offers
It works almost fine, but the problem is when I click “Add offer” link – form is added with parameters of last category.
So with examples I’ve given above, when I click “Add offer” for Car category – I see bunch of parameters not for car, but for bicycle! Looks like I should pass category to simple_fields_for or something like that, but I don’t have any idea how to do it.
Can anyone help me?
I found a workaround for this problem: I’ve added a new action like “generate_form”, where I create new User and add new Offer to it, and in view I generate form for this new User with nested fields for it’s Offer.
When user clicks “Add offer” link, I execute ajax request to this generate_form action, passing category id, but in response I get , so I cut nested form, with jQuery it’s quite easy, and also I need to replace zero offer id with randomly generated, both of these are performed by ajax “done” callback.
Maybe quite ugly way, but finally it works.
If anyone can provide another solution – I will be glad to see it.