Quick, probably n00bish question, but I can''t seem to figure it out. I am developing a contact management application, and while I am using REST, I have also defined a custom route to make it more understandable to the end user: map.resources :contacts map.details ''details/:id'', :controller => ''contacts'', :action => ''edit'' # CRM-type apps allow editing contact details on the viewing page, instead of a separate show/edit page Anyways, the issue is when a record contains invalid data. GIven the following action: def update @contact = Contact.find(params[:id]) if @contact.update_attributes(params[:contact]) flash[:notice] = "Contact information was updated" redirect_to contacts_url else render :action => "edit" end end the address bar displays http://mysite/contacts/1, which results in a Missing Template if the user accidently hits enter (as I don''t have a Show action, Edit takes it''s place). Is there something I need to add to the render method to make sure that my route is kept? I don''t want the user to see contacts/1 but details/1. I tried changing it to redirect_to details_path(@contact), but then no error messages are displayed when the page reloads. - Wayne --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
What does your form look like? For that matter, look in the log and see if you are submitting to contacts or details. I suspect you are submitting to details. But, my other guess / suggestion is to add :controller => "details" to your render line. HTH pedz -- Posted via http://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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
According to the log, it''s rendering contacts (e.g. http://localhost:3000/contacts/1) , which is the issue because the URL used to GET the edit template is http://localhost:3000/details/1 . Here''s the form: <%= error_messages_for :contact %> <div id="details"> <%= content_tag(''h1'', @contact.full_name) %> <div id="contacts-tab"> <% form_for @contact do |f| %> <p> <label for="first_name">First Name:</label> <%= f.text_field :first_name %> </p> <%# Remaining tags snipped for brevity %> <p> <%= submit_tag "Save Contact" %> </p> <% end %> </div> <div id="notes-tabs"> <%= link_to ''+ Add Note'', new_notes_path(:contact_id => @contact) %> <% if @contact.notes.any? %> <% @contact.notes.each do |note| %> <p> <%=h note.body %> <br />Posted <%=h distance_of_time_in_words_to_now(note.created_at) %> </p> <% end %> <% end %> </div> </div> "details" isn''t a controller, it''s just a static part of a named route (so I can pretty up the URL and have it display http://mysite/details/ 1 instead of http://mysite/contacts/1/edit): map.details "details/:id", :controller => "contacts", :action => "edit" I''m sure I''m just forgetting to add a line somewhere to render the named route instead of the regular route, I''m just not sure where said line should go :) - Wayne On May 24, 2008, at 8:53 PM, Perry Smith wrote:> > What does your form look like? For that matter, look in the log and > see > if you are submitting to contacts or details. I suspect you are > submitting to details. > > But, my other guess / suggestion is to add :controller => "details" to > your render line. > > HTH > pedz > > -- > Posted via http://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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Wayne Molina wrote:> <% form_for @contact do |f| %>This is why you are posting to the contact path instead of the details path. It is just taking all the defaults and assumptions but you want something different. (In particular, where to post to). You need to change the form_for @contact to something else. Here is a sample from the documentations: <% form_for :person, @person, :url => { :action => "update" } do |f| %> Notice that they specify the type :person as well as the variable to pull the initial values from. But they add in a URL. You need to do something similar. Probably something like :url => details_path(@contact) -- but I''m kinda guessing. I always have to play with these things for a bit to get something that works. The "rake routes" command helps me. Another way to get a handle on this is to view the page in the browser. On the form, the submit or action is the URL you will post to. That is what you are trying to change. Good luck. pedz -- Posted via http://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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---