I thought I was trying to do something rather simple, but it has
caused me a lot of headaches. Here it is:
- in my program: model_a has_many model_b. model_b has_many model_c.
- in the user interface, I would like the user to be able to fill the
information for one model_a, one or more associated model_bs
(corresponding fields could be added with a set of links 'add/remove a
model_b'), and for each model_b added, one or more model_c (with the
same mechanism).
Thanks to the great tutorial "Handle multiple models in one form",
it's easy to handle the first step (any number of model_b per
model_a), but I can't get the second step to work. The natural
indexing should (I think) be:
But it doesn't seem to work. I read here http://guides.rubyonrails.org/form_helpers.html
that "only one level of “arrayness” is allowed" and that I should use
hashes instead, but I am not quite sure I understand how to do it.
What that comment is saying is that you can replace an array eg
[a,b,c] with a hash eg {1 => a, 2=> b, 3=>c}
Generating those keys is up to your client side code, approaches
included using a number you increment or going for some unique thing
you generate on the spot (eg time in milliseconds concatenated with a
random number) so that you don't have to keep track of how many fields
and what not you have created clientside.
Considering there is a bit of "wizardry" that needs to be done and
that Rails doesn't include helpers to do this simply, does it mean it
is not recommended to build such complex forms?
I am not very experienced with Rails, but I love the fact it is very
"clean" and I feel a bit cautious having to generate keys manually.
Considering there is a bit of "wizardry" that needs to be done and
that Rails doesn't include helpers to do this simply, does it mean it
is not recommended to build such complex forms?
I am not very experienced with Rails, but I love the fact it is very
"clean" and I feel a bit cautious having to generate keys manually.
There is the nested forms stuff in rails 2.3 (unfortunately not yet
documented in the guide).