I have a form that manages a few models, using
accepts_nested_attributes_for
The new event form passes params like so:
"event"=>{
"name"=>"",
"happenings_attributes"=>{
"0"=>{
"location_attributes"=>{
"city"=>"",
"country"=>"",
"state"=>""
},
"location_id"=>"26"}
}
}
It all works fine, except I''d like to add a choice of selecting an
existing location, or entering values for a new one to be created.
I might be going brain dead - I imagine this is a common thing to do -
like selecting an existing address or creating new one on an e-
commerce site, but alas I''ve never done it and can''t seem to
find
relevant search results.
Things I''ve tried:
-----------------------
# option 1: remove the location_attributes at the controller level, if
an existing location_id is passed
If so, this is the snippet of code I''m using in a before_filter on the
create action:
params[:event][:happenings_attributes].each do |h|
unless h[1]["location_id"].blank?
h[1].delete("location_attributes")
end
end
- which goes ignored and the validations for creating a new location
are triggered.
I got to the h[1] level by playing around in console like so:
params = {
"event"=>{
"name"=>"",
"happenings_attributes"=>{
"0"=>{
"start_at" => ''2010-03-02'',
"location_attributes"=>{
"city"=>"",
"country"=>"",
"state"=>""
},
"location_id"=>"26"}
}
}
}
>>
params[''event''][''happenings_attributes''].each
do |h|
?> puts h.class
>> end
Array
=>
{"0"=>{"location_attributes"=>{"city"=>"",
"country"=>"",
"state"=>""},
"start_at"=>"2010-03-02",
"location_id"=>"26"}}
>>
params[''event''][''happenings_attributes''].each
do |h|
?> puts h[1]["location_id"]
>> puts h[1]["location_attributes"]
>> end
26
citycountrystate
--------------------
# option 2: remove the location_attributes at the model level
# Happening model
before_validation :check_new_or_existing_location
def check_new_or_existing_location
if !location_id.blank?
location_attributes= nil
end
end
--------------------
Any suggestions appreciated :)
--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.