Have you tried explicitly setting the URL to post to in the form_for? >From the trace, it looks like it's trying to generate a route to edit_full_quote_ho without specifying the parent model. [...@full_quote_ho_model, @full_quote_ho] might work as well.
--Matt Jones On Jun 23, 2:02 am, Ahad Amdani <[email protected]> wrote: > Hello, > > I'm encountering a very strange issue and I've identified behavior I > don't quite understand. I have a design in which a "full model" exists > with sub-screens for each of the pages worth of data input. Each screen > goes through validation, and then updates the overall model with the > validated input, as well as saving the screen's information to a > specific "screen" table. > > For instance: > > class FullQuoteHoModel < ActiveRecord::Base > has_one :full_quote_ho > has_one :full_quote_ho_loc > has_one :full_quote_ho_cov > has_one :full_quote_ho_additional_coverage > > end > > class FullQuoteHo < ActiveRecord::Base > belongs_to :full_quote_ho_model > end > > class FullQuoteHoLoc < ActiveRecord::Base > belongs_to :full_quote_ho_model > end > > class FullQuoteHoCov < ActiveRecord::Base > belongs_to :full_quote_ho_model > end > > class FullQuoteHoAdditionalCoverage < ActiveRecord::Base > belongs_to :full_quote_ho_model > end > > FullQuoteHoModel is the "entire" model, with each of the others as > "sub-screens" that accept inputs, validate them, save the values to > their tables, and also update the accepted, validated inputs into the > "entire" model. > > I only want index/show/new/destroy in the FullQuoteHoModel, and I only > want new/create/edit/update in the sub-screens. I do this in the routes > file as follows: > > map.resources :full_quote_ho_models, :except => [:edit, :update, > :create], :requirements => {:id => /[0-9]+/} do |full_quote_ho_model| > full_quote_ho_model.resources :full_quote_ho_additional_coverages, > :only => [:new, :create, :edit, :update], :requirements => {:id => > /[0-9]+/}, :name_prefix => nil > full_quote_ho_model.resources :full_quote_ho_covs, :only => [:new, > :create, :edit, :update], :requirements => {:id => /[0-9]+/}, > :name_prefix => nil > full_quote_ho_model.resources :full_quote_ho_locs, :only => [:new, > :create, :edit, :update], :requirements => {:id => /[0-9]+/}, > :name_prefix => nil > full_quote_ho_model.resources :full_quote_hos, :only => [:new, > :create, :edit, :update], :requirements => {:id => /[0-9]+/}, > :name_prefix => nil > end > > Now, when I create a new full quote ho model from the FullQuoteHoModel > index screen, I can create each of the screens just fine, as well as the > overall model (for testing purposes, there is no validation above, so I > create empty records that are assigned system-generated IDs). > > When I access any screen from the FullQuoteHoModel, if it has the same > ID path as the FullQuoteHoModel, things show up and work as intended. > However, if the ID of the screen is not the same as the > FullQuoteHoModel, then I receive the following error: > > ActionController::RoutingError in Full_quote_hos#edit > > Showing app/views/full_quote_hos/edit.html.erb where line #3 raised: > > full_quote_ho_url failed to generate from {:action=>"update", > :full_quote_ho_model_id=>#<FullQuoteHo id: 4, inception_date: "", > building_construction: nil, protection_class: nil, territory: "", > policy_form: "", replacement_cost_on_contents: "", occupancy_type: "", > building_type: "", applicants_first_name: "", applicants_middle_initial: > "", applicants_last_name: "", applicants_date_of_birth: "", > applicants_ssn: "", coapplicants_first_name: "", > coapplicants_middle_initial: "", coapplicants_last_name: "", > coapplicants_date_of_birth: "", coapplicants_ssn: "", > property_address_1: "", property_address_2: "", property_zip_code: "", > property_county: "", property_city: "", property_state: "", > property_city_limits: "", property_address_how_long: "", > mailing_address_1: "", mailing_address_2: "", mailing_zip_code: "", > mailing_county: "", mailing_city: "", mailing_state: "", > previous_address_1: "", previous_address_2: "", previous_zip_code: "", > previous_county: "", previous_city: "", previous_state: "", > currently_insured: "", current_carrier: "", created_at: "2009-06-23 > 05:45:03", updated_at: "2009-06-23 05:45:03", full_quote_ho_model_id: > 3>, :controller=>"full_quote_hos"}, expected: {:action=>"update", > :controller=>"full_quote_hos"}, diff: > {:full_quote_ho_model_id=>#<FullQuoteHo id: 4, inception_date: "", > building_construction: nil, protection_class: nil, territory: "", > policy_form: "", replacement_cost_on_contents: "", occupancy_type: "", > building_type: "", applicants_first_name: "", applicants_middle_initial: > "", applicants_last_name: "", applicants_date_of_birth: "", > applicants_ssn: "", coapplicants_first_name: "", > coapplicants_middle_initial: "", coapplicants_last_name: "", > coapplicants_date_of_birth: "", coapplicants_ssn: "", > property_address_1: "", property_address_2: "", property_zip_code: "", > property_county: "", property_city: "", property_state: "", > property_city_limits: "", property_address_how_long: "", > mailing_address_1: "", mailing_address_2: "", mailing_zip_code: "", > mailing_county: "", mailing_city: "", mailing_state: "", > previous_address_1: "", previous_address_2: "", previous_zip_code: "", > previous_county: "", previous_city: "", previous_state: "", > currently_insured: "", current_carrier: "", created_at: "2009-06-23 > 05:45:03", updated_at: "2009-06-23 05:45:03", full_quote_ho_model_id: > 3>} > > Extracted source (around line #3): > > 1: <h1>Editing Full Quote Homeowners: Basic Information</h1> > 2: > 3: <% form_for(@full_quote_ho) do |f| %> > 4: <%= error_messages_for :full_quote_ho, :header_message => > "#...@full_quote_ho.errors.count} validation errors prohibited this Full > Quote Screen from being validated.", :message => "Please correct the > fields in red and try again." %> > 5: > > This is an issue because currently, a user can create a new > FullQuoteHoModel, fill out two screens, then hit Back and go to the > FullQuoteHoModel index, maybe create a new FullQuoteHoModel, fill out > all screens, then decide to return to the first one and create the > remaining two screens. The IDs are then out of sync (which isn't > unintended behavior - technically speaking, no matter what the ID of the > screen, it belongs to one and only one FullQuoteHoModel) and trying to > go back and edit that screen doesn't show up. Is this a routing issue > (the generated URLs, maybe)? Or something else? > > The index page shows the ability to create or edit screens as follows > per FullQuoteHoModel record: > > <% @full_quote_ho_models.each do |full_quote_ho_model| %> > <tr> > <td><%=h full_quote_ho_model.inception_date %></td> > <td><%=h full_quote_ho_model.policy_form %></td> > <td><%=h full_quote_ho_model.applicants_first_name %></td> > <td><%=h full_quote_ho_model.applicants_middle_initial %></td> > <td><%=h full_quote_ho_model.applicants_last_name %></td> > <td><%=h full_quote_ho_model.applicants_ssn %></td> > <td><%=h full_quote_ho_model.property_address_1 %></td> > <td><%=h full_quote_ho_model.property_address_2 %></td> > <td><%=h full_quote_ho_model.property_zip_code %></td> > <td><%=h full_quote_ho_model.property_county %></td> > <td><%=h full_quote_ho_model.property_city %></td> > <td><%=h full_quote_ho_model.property_state %></td> > </tr> > <tr> > <td colspan="1"><%= link_to 'Show', full_quote_ho_model %></td> > > <% if full_quote_ho_model.full_quote_ho != nil %> > <td colspan="2"><%= link_to 'Edit Basic Information', > edit_full_quote_ho_path(full_quote_ho_model.id, > full_quote_ho_model.full_quote_ho.id) %></td> > <% else %> > <td colspan="2"><%= link_to 'Continue Basic Information', > new_full_quote_ho_path(full_quote_ho_model.id) %></td> > <% end %> > > <% if full_quote_ho_model.full_quote_ho_loc != nil %> > <td colspan="2"><%= link_to 'Edit Locations', > edit_full_quote_ho_loc_path(full_quote_ho_model.id, > full_quote_ho_model.full_quote_ho_loc.id) %></td> > <% else %> > <td colspan="2"><%= link_to 'Continue Locations', > new_full_quote_ho_loc_path(full_quote_ho_model.id) %></td> > <% end %> > > <% if full_quote_ho_model.full_quote_ho_cov != nil %> > <td colspan="2"><%= link_to 'Edit Coverages', > edit_full_quote_ho_cov_path(full_quote_ho_model.id, > full_quote_ho_model.full_quote_ho_cov.id) %></td> > <% else %> > <td colspan="2"><%= link_to 'Continue Coverages', > new_full_quote_ho_cov_path(full_quote_ho_model.id) %></td> > <% end %> > > <% if full_quote_ho_model.full_quote_ho_additional_coverage != nil > %> > <td colspan="2"><%= link_to 'Edit Additional Coverages', > edit_full_quote_ho_additional_coverage_path(full_quote_ho_model.id, > full_quote_ho_model.full_quote_ho_additional_coverage.id) %></td> > <% else %> > <td colspan="2"><%= link_to 'Continue Additional Coverages', > new_full_quote_ho_additional_coverage_path(full_quote_ho_model.id) > %></td> > <% end %> > > <td colspan="1"><%= link_to 'Destroy', full_quote_ho_model, > :confirm => 'Are you sure?', :method => :delete %></td> > </tr> > > If I try and alter the generated URLs to not include IDs, I receive > errors. I know the ordering of the IDs is appropriate. The pathing > should be as it currently is: /full_quote_ho_models/#/full_quote_ho/# or > /full_quote_ho_models/#/full_quote_ho_locs/#, etc. > > Has anyone seen this behavior before? > -- > Posted viahttp://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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 [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---

