When modifying a model that has a has_one or has_many relationship
people usually create form that will submit the id of the selected
associated object. Rails takes this into consideration with
validations: validate_presence_of :country will validate if country
or country_id has been set.
In Rails, providing the associated ID works fine with has_one but if
you try to do this with a has_many:
form_for(@country) do |form|
form.select :state_ids, @states
form.select :state_ids, @states
#etc…
The selected state_ids are written to the DB as soon as they’re
assigned. What’s the reasoning behind this?
How is one supposed to assign multiple collection ids via a form?
accepts_nested_attributes_for doesn’t work out too well either because
you’re just setting IDs -a field that is explicitly ignored by
accepts_nested except when testing whether or not the given params are
new.
On Sat, Nov 14, 2009 at 6:37 AM, MaggotChild [email protected]
wrote:
form_for(@country) do |form|
form.select :state_ids, @states
form.select :state_ids, @states
#etc…
The selected state_ids are written to the DB as soon as they’re
assigned. What’s the reasoning behind this?
How is one supposed to assign multiple collection ids via a form?
You have to send them as an array, and assign them as an array too.
For example,
View
form.select(“state_ids[]”, @states)
form.select(“state_ids[]”, @states)
Controller
@whatever.state_ids = params[:state_ids]
You’ll have to figure out the exact syntax, but that’s the idea.
Hope it helps.
Leonardo M…
There’s no place like ~
Leonardo M. wrote:
On Sat, Nov 14, 2009 at 6:37 AM, MaggotChild [email protected]
wrote:
form_for(@country) do |form|
�form.select :state_ids, @states
�form.select :state_ids, @states
�#etc…
The selected state_ids are written to the DB as soon as they’re
assigned. What’s the reasoning behind this?
How is one supposed to assign multiple collection ids via a form?
You have to send them as an array, and assign them as an array too.
For example,
View
form.select(“state_ids[]”, @states)
form.select(“state_ids[]”, @states)
Leonardo is right. However, you probably don’t want several s
for the same field – try a .
Controller
@whatever.state_ids = params[:state_ids]
You’ll have to figure out the exact syntax, but that’s the idea.
Hope it helps.
Leonardo M…
There’s no place like ~
Best,
–
Marnen Laibow-Koser
http://www.marnen.org
[email protected]