Brandon
2006-Nov-30 21:01 UTC
Displaying action partial on index page - object id doesn''t persist
This problem is a continuation of an earlier thread "Partial doesn''t yet have object" but I don''t think as many people saw it because my question came up in a reply. - I''m building an store app that include a product catalog, details page, and cart. - I''m attempting to put them in the same layout using partials. - Product catalog is the index action of the store controller Clicking on the product in the catalog invokes the "view_details" action, which is fine if it not a partial (i.e. path in the browser is /store/view_details/5). The problem is, according to my understanding so far of partials, the action in "view_details" must "redirect_to :action => :index". Because of that redirect, it appears as though the selection doesn''t persist and therefore my "view_details" (i.e. the currently selected item) never displays. So I''m starting to think that I have to store the current product selected in the session by way of something like a "Basket" (more temporary than a cart? good names are welcome) model. Does that makes sense? Or is there a better way to make my selection persist so I can display the catalog, deatails and cart all on the same page? --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
Alex Wayne
2006-Dec-01 06:45 UTC
Re: Displaying action partial on index page - object id does
Brandon Wright wrote:> This problem is a continuation of an earlier thread "Partial doesn''t > yet have object" but I don''t think as many people saw it because my > question came up in a reply. > > - I''m building an store app that include a product catalog, details > page, and cart. > - I''m attempting to put them in the same layout using partials. > - Product catalog is the index action of the store controller > > Clicking on the product in the catalog invokes the "view_details" > action, which is fine if it not a partial (i.e. path in the browser is > /store/view_details/5). The problem is, according to my understanding > so far of partials, the action in "view_details" must "redirect_to > :action => :index". Because of that redirect, it appears as though the > selection doesn''t persist and therefore my "view_details" (i.e. the > currently selected item) never displays. > > So I''m starting to think that I have to store the current product > selected in the session by way of something like a "Basket" (more > temporary than a cart? good names are welcome) model. > > Does that makes sense? Or is there a better way to make my selection > persist so I can display the catalog, deatails and cart all on the same > page?You could use the flash to save the curent object for one request, and its cleared automatically after that: def view_details flash[:product_id] = params[:id] redirect_to :action => ''index'' end def index if flash[:product_id] @product = Product.find(flash[:product_id]) end end Or you could use ajax to insert the partial into your index page. Or, most simple of all, simply send people to a page wit info about the product, without redirecting then back to the index page. The URLs and navigation will be much simpler and cleaner this way. -- 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 -~----------~----~----~----~------~----~------~--~---
David Schmidt
2006-Dec-20 23:16 UTC
Re: Displaying action partial on index page - object id doesn''t persist
(Yes, I''m this far behind reading the list mail, but I wanted to reply since I may still have something to add.) I think the main problem you have right now is a misunderstanding of how layouts work. Let''s first assume your controller is named store_controller.rb. Instead of using a partial, let your method render it''s default template. In the case of the view_details method in store_controller.rb, this would be app/views/store/view_details.rhtml. Rails will first render this template, save the output and then look for an optional layout for the current controller (since layouts are controller-specific). Rails looks for the layout in the following order (see section 17.9 in Agile Web Development with Rails or section 22.9 in the second edition.) o Layout specified explicitly in a render command o Layout specified in the current controller''s "layout" command o A layout named after the current controller, located in app/views/layouts (app/views/layouts/store.rhtml in your case). o Lastly, the file app/views/layouts/application.rhtml. If found, the saved output of your template will replace the line in the layout body matching "<%= yield :layout %>". (Since ":layout" is the default you could just specify "<%= yield %>".) The older method, "<%= @content_for_layout %>" also works. So, without using partials or explicit renders you would have your view_details method which would render from the following files: app/views/store/view_details.rhtml (template for store_controller#view_details) app/views/layouts/store.rhtml (layout file for store_controller.rb) If you wanted a global layout for all controllers then that layout file could be: app/views/layouts/application.rb Now, both your template AND the selected layout can both still use partials. For example, I often have common code for the <head> section in my layout: app/views/layouts/store.rhtml: <html> <head> <%= render :partial => ''layouts/head'' %> </head> ... </html> This would render app/views/layouts/_head.rhtml and place that output in the <head> section of my page. Hope this helps, David Schmidt Brandon wrote:> This problem is a continuation of an earlier thread "Partial doesn''t > yet have object" but I don''t think as many people saw it because my > question came up in a reply. > > - I''m building an store app that include a product catalog, details > page, and cart. > - I''m attempting to put them in the same layout using partials. > - Product catalog is the index action of the store controller > > Clicking on the product in the catalog invokes the "view_details" > action, which is fine if it not a partial (i.e. path in the browser is > /store/view_details/5). The problem is, according to my understanding > so far of partials, the action in "view_details" must "redirect_to > :action => :index". Because of that redirect, it appears as though the > selection doesn''t persist and therefore my "view_details" (i.e. the > currently selected item) never displays. > > So I''m starting to think that I have to store the current product > selected in the session by way of something like a "Basket" (more > temporary than a cart? good names are welcome) model. > > Does that makes sense? Or is there a better way to make my selection > persist so I can display the catalog, deatails and cart all on the same > page? > > > >--~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---