Hi Ex, how do I get the empty_cart.rjs template to be ''fired'' when I do this in my controller. my Controller ===================class SomeController < ApplicationController def remove_from_cart if quantity <= 0 empty_care else foo end end def empty_cart does_something_here end end remove_from_cart.rjs =====================page.replace_html( "cart", :partial => "cart", :object => @cart ) page[:cart].visual_effect :shake empty_cart.rjs =====================page[:cart].visual_effect :puff For some reason it doesn''t run the AJAX calls in the empty_cart.rjs but does run the ones in remove_from_cart.rjs As I want the cart hidden ONLY when it''s empty I don''t want to put a "page[:cart].visual_effect :puff" every time I just remove an item. (Sorry but still hazy on this automatic loading of templates at the end oa method in a controller etc etc) Thanks. -- 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 -~----------~----~----~----~------~----~------~--~---
Because the action is "remove_from_cart" (see params[:action]), and that''s what Rails uses to find the view to use. Do this: class SomeController < ApplicationController def remove_from_cart if quantity <= 0 empty_cart render :partial => "empty_cart" else foo end end Jason On 7/3/07, Jean Nibee <rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> > > Hi > > Ex, how do I get the empty_cart.rjs template to be ''fired'' when I do > this in my controller. > > my Controller > ===================> class SomeController < ApplicationController > def remove_from_cart > if quantity <= 0 > empty_care > else > foo > end > end > > def empty_cart > does_something_here > end > end > > remove_from_cart.rjs > =====================> page.replace_html( "cart", :partial => "cart", :object => @cart ) > page[:cart].visual_effect :shake > > > empty_cart.rjs > =====================> page[:cart].visual_effect :puff > > > For some reason it doesn''t run the AJAX calls in the empty_cart.rjs but > does run the ones in remove_from_cart.rjs > > As I want the cart hidden ONLY when it''s empty I don''t want to put a > "page[:cart].visual_effect :puff" every time I just remove an item. > > (Sorry but still hazy on this automatic loading of templates at the end > oa method in a controller etc etc) > > Thanks. > > -- > 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 -~----------~----~----~----~------~----~------~--~---
Sorry, hit Send too quickly. You can also do, instead of the above : def empty_cart render :partial => "empty_cart" end as long as there is no render call in remove_from_cart. Otherwise you''ll get an error along the lines of "can''t render more than once". Jason On 7/3/07, Jason Roelofs <jameskilton-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > Because the action is "remove_from_cart" (see params[:action]), and that''s > what Rails uses to find the view to use. Do this: > > class SomeController < ApplicationController > def remove_from_cart > if quantity <= 0 > empty_cart > render :partial => "empty_cart" > else > foo > end > end > > Jason > > On 7/3/07, Jean Nibee <rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote: > > > > > > Hi > > > > Ex, how do I get the empty_cart.rjs template to be ''fired'' when I do > > this in my controller. > > > > my Controller > > ===================> > class SomeController < ApplicationController > > def remove_from_cart > > if quantity <= 0 > > empty_care > > else > > foo > > end > > end > > > > def empty_cart > > does_something_here > > end > > end > > > > remove_from_cart.rjs > > =====================> > page.replace_html ( "cart", :partial => "cart", :object => @cart ) > > page[:cart].visual_effect :shake > > > > > > empty_cart.rjs > > =====================> > page[:cart].visual_effect :puff > > > > > > For some reason it doesn''t run the AJAX calls in the empty_cart.rjs but > > does run the ones in remove_from_cart.rjs > > > > As I want the cart hidden ONLY when it''s empty I don''t want to put a > > "page[:cart].visual_effect :puff" every time I just remove an item. > > > > (Sorry but still hazy on this automatic loading of templates at the end > > oa method in a controller etc etc) > > > > Thanks. > > > > -- > > 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 -~----------~----~----~----~------~----~------~--~---
Jason Roelofs wrote:> Sorry, hit Send too quickly. > > You can also do, instead of the above : > > def empty_cart > render :partial => "empty_cart" > end > > as long as there is no render call in remove_from_cart. Otherwise you''ll > get > an error along the lines of "can''t render more than once". > > JasonTried both solutions and neither work. When I use the render :partial => "empty_cart" in my remove_from_cart method it tells me there is no such partial. SO I change it to be "Cart" (as I do have a cart partial in there). no go, still fires the remove_from_cart Ajax definitions in the remove_from_cart.rjs and doesn''t actually ''empty'' the cart and ''puff'' it out of the view. Incidentally, I have no errors in the log/development.log file So it seems to be just a ''flow'' issue. (output log for sanity sake...) NOtice that there is a rendering call to my store/empty_cart but it''s just not changing my view.>>>>>>>>> OUTPUT LOGProcessing StoreController#empty_cart (for 66.11.89.241 at 2007-07-03 13:53:44) [POST] Session ID: 830e085b4b3270e2a1fc382f30a77a99 Parameters: {"commit"=>"Empty cart", "action"=>"empty_cart", "controller"=>"store"} Rendering store/empty_cart Completed in 0.01094 (91 reqs/sec) | Rendering: 0.00968 (88%) | DB: 0.00000 (0%) | 200 OK [http://foo.bar.baz/store/empty_cart] <<<<<<<<<< END OUTPUT LOG -- 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 -~----------~----~----~----~------~----~------~--~---
Ah, if you do :partial => "empty_cart", then the file Rails looks for is _empty_cart.rjs (note the beginning underscore). Can you just do render "empty_cart" ? Jason On 7/3/07, Jean Nibee <rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> > > Jason Roelofs wrote: > > Sorry, hit Send too quickly. > > > > You can also do, instead of the above : > > > > def empty_cart > > render :partial => "empty_cart" > > end > > > > as long as there is no render call in remove_from_cart. Otherwise you''ll > > get > > an error along the lines of "can''t render more than once". > > > > Jason > > Tried both solutions and neither work. When I use the render :partial => > "empty_cart" in my remove_from_cart method it tells me there is no such > partial. SO I change it to be "Cart" (as I do have a cart partial in > there). no go, still fires the remove_from_cart Ajax definitions in the > remove_from_cart.rjs and doesn''t actually ''empty'' the cart and ''puff'' it > out of the view. > > Incidentally, I have no errors in the log/development.log file So it > seems to be just a ''flow'' issue. > > (output log for sanity sake...) NOtice that there is a rendering call to > my store/empty_cart but it''s just not changing my view. > > >>>>>>>>> OUTPUT LOG > Processing StoreController#empty_cart (for 66.11.89.241 at 2007-07-03 > 13:53:44) [POST] > Session ID: 830e085b4b3270e2a1fc382f30a77a99 > Parameters: {"commit"=>"Empty cart", "action"=>"empty_cart", > "controller"=>"store"} > Rendering store/empty_cart > Completed in 0.01094 (91 reqs/sec) | Rendering: 0.00968 (88%) | DB: > 0.00000 (0%) | 200 OK [http://foo.bar.baz/store/empty_cart] > <<<<<<<<<< END OUTPUT LOG > > -- > 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 -~----------~----~----~----~------~----~------~--~---
Jason Roelofs wrote:> Ah, if you do :partial => "empty_cart", then the file Rails looks for is > _empty_cart.rjs (note the beginning underscore). > > Can you just do render "empty_cart" ? > > JasonWhen I try that (It''s actually "render :file => "empty_cart") I get the following error (I have also tried using empty_cart.rjs to the same results)>>>>>>>>>> OUTPUT FROM LOG FILEProcessing StoreController#remove_from_cart (for 66.11.89.241 at 2007-07-03 15:12:27) [POST] Session ID: 830e085b4b3270e2a1fc382f30a77a99 Parameters: {"commit"=>"Remove from Cart", "action"=>"remove_from_cart", "id"=>"1", "controller"=>"store"} Rendering empty_cart ActionView::TemplateError (No such file or directory - empty_cart) in empty_cart: /usr/lib/ruby/gems/1.8/gems/actionpack-1.13.3/lib/action_view/base.rb:405:in `read'' /usr/lib/ruby/gems/1.8/gems/actionpack-1.13.3/lib/action_view/base.rb:405:in `read_template_file'' <<SNIPPED>>> <<<<<<<<<< END OUTPUT -- 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 -~----------~----~----~----~------~----~------~--~---
I think what''s got me all ''flustered'' is how to just call another method in my controller and have THAT partial or RJS be executed automatically and NOT the calling method. -- 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 -~----------~----~----~----~------~----~------~--~---
Sorry, but that''s not how Rails works. It doesn''t figure out the view from the function being ran, but from the request from the client. E.g. www.host.com/users/login becomes: params = { :controller => "users", :action => "login" } And thus, if there is no explicit render call in UsersController#login, then Rails looks for login.rhtml / login.rxml / login.rjs What you can do is an explicit render call as such: class SomeController < ApplicationController def remove_from_cart if quantity <= 0 render :action => "empty_cart" else foo end end def empty_cart does_something_here end end But that only tells Rails what view to look for, it doesn''t actually call SomeController#empty_cart, so the "does_something_here" won''t actually get done, but you will get "empty_cart.rhtml" to render. From what I''ve gathered from your code and responses, I would say this is your best bet: class SomeController < ApplicationController def remove_from_cart if quantity <= 0 empty_cart render :partial => "empty_cart" else foo end end def empty_cart does_something_here end end and then have a view file under views/some_controller/_empty_cart.rjs. Hope that helps. Jason On 7/3/07, Jean Nibee <rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> > > I think what''s got me all ''flustered'' is how to just call another method > in my controller and have THAT partial or RJS be executed automatically > and NOT the calling method. > > -- > 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 -~----------~----~----~----~------~----~------~--~---
Jason Roelofs wrote:> Sorry, but that''s not how Rails works. It doesn''t figure out the view > from > the function being ran, but from the request from the client. E.g. > > www.host.com/users/login > > becomes: > > params = { > :controller => "users", > :action => "login" > } > > And thus, if there is no explicit render call in UsersController#login, > then > Rails looks for login.rhtml / login.rxml / login.rjs > > What you can do is an explicit render call as such: > > class SomeController < ApplicationController > def remove_from_cart > if quantity <= 0 > render :action => "empty_cart" > else > foo > end > end > > def empty_cart > does_something_here > end > end > > But that only tells Rails what view to look for, it doesn''t actually > call > SomeController#empty_cart, so the "does_something_here" won''t actually > get > done, but you will get "empty_cart.rhtml" to render. > > From what I''ve gathered from your code and responses, I would say this > is > your best bet: > > class SomeController < ApplicationController > def remove_from_cart > if quantity <= 0 > empty_cart > render :partial => "empty_cart" > else > foo > end > end > > def empty_cart > does_something_here > end > end > > and then have a view file under views/some_controller/_empty_cart.rjs. > > Hope that helps. > > JasonHi Actually, aside from having empty_cart.rjs and NOT _empty_cart.rjs (as none of my rjs templates require the starting _, only my partials do) I still am not able to call another method and then render the empty_cart.rjs. It seems that every time the remove_from_cart.rjs is the final render even with [render :file => "empty_cart" or "empty_cart.rjs"] after the method call. I''ll post some more code in a bit once I can get access to my home machine. Thanks. -- 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 -~----------~----~----~----~------~----~------~--~---
Jean Nibee wrote:> Hi > > Actually, aside from having empty_cart.rjs and NOT _empty_cart.rjs (as > none of my rjs templates require the starting _, only my partials do) I > still am not able to call another method and then render the > empty_cart.rjs. It seems that every time the remove_from_cart.rjs is the > final render even with [render :file => "empty_cart" or > "empty_cart.rjs"] after the method call. > > I''ll post some more code in a bit once I can get access to my home > machine. > > Thanks.Synopsis of Issue: (many replies make it hard to follow the current state of my app) The ''empty_cart'' action works perfects if button/link clicked from the site. Calling ''remove_from_cart'' works perfectly EXCEPT when the item being removed is the LAST item in the cart. When that happens I want to (redirect?) the call to remove_from_cart to the empty_cart action and then have the associated empty_cart.rjs template rendered, NOT the one that Rails would render [by default] "remove_from_cart.rjs". Here''s some code I have (snipped in places for brevity).>>>>>>>>>> controller / rjs codeTHE CONTROLLER def remove_from_cart @cart = find_cart begin product = Product.find( params[:id]) rescue ActiveRecord::RecordNotFound logger.error( "Attempt to access invalid product #{params[:id]}") redirect_to_index( "Invalid product to remove." ) else @current_item = @cart.remove_product(product) end #-- Where the magic should happen! if @cart.items.size <= 0 empty_cart render :partial => "empty_cart" end end def empty_cart session[:cart] = nil end THE RJS TEMPLATES: remove_from_cart.rjs page.replace_html( "cart", :partial => "cart", :object => @cart ) page[:cart].visual_effect :shake THE RJS TEMPLATES: empty_cart.rjs page[:cart].visual_effect :puff <<<<<<<<<< end controller / rjs code Log file Error: ActionView::ActionViewError (No rhtml, rxml, rjs or delegate template found for store/_empty_cart in /home/jbateman/sandbox/depot/config/../app/views): /usr/lib/ruby/gems/1.8/gems/actionpack-1.13.3/lib/action_view/base.rb:399:in `find_template_extension_for'' /usr/lib/ruby/gems/1.8/gems/actionpack-1.13.3/lib/action_view/base.rb:335:in `pick_template_extension'' /usr/lib/ruby/gems/1.8/gems/actionpack-1.13.3/lib/action_view/base.rb:249:in `render_file'' /usr/lib/ruby/gems/1.8/gems/actionpack-1.13.3/lib/action_view/base.rb:275:in `render'' I ''feel'' I have researched this well and have a good understanding of the flow of events ''behind the scenes'' (Thanks mostly to all of you who have replied to me) but I''m still missing something that is not ''clicking'' in my head on how to do this. Thanks! -- 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 -~----------~----~----~----~------~----~------~--~---
Jean Nibee wrote:> Jean Nibee wrote:> Synopsis of Issue: (many replies make it hard to follow the current > state of my app) > > The ''empty_cart'' action works perfects if button/link clicked from the > site. Calling ''remove_from_cart'' works perfectly EXCEPT when the item > being removed is the LAST item in the cart. When that happens I want to > (redirect?) the call to remove_from_cart to the empty_cart action and > then have the associated empty_cart.rjs template rendered, NOT the one > that Rails would render [by default] "remove_from_cart.rjs". > > Here''s some code I have (snipped in places for brevity). > >>>>>>>>>>> controller / rjs code > > THE CONTROLLER > def remove_from_cart > @cart = find_cart > begin > product = Product.find( params[:id]) > rescue ActiveRecord::RecordNotFound > logger.error( "Attempt to access invalid product #{params[:id]}") > redirect_to_index( "Invalid product to remove." ) > else > @current_item = @cart.remove_product(product) > end > > #-- Where the magic should happen! > if @cart.items.size <= 0 > empty_cart > render :partial => "empty_cart" > end > > end > > def empty_cart > session[:cart] = nil > end > > THE RJS TEMPLATES: remove_from_cart.rjs > page.replace_html( "cart", :partial => "cart", :object => @cart ) > page[:cart].visual_effect :shake > > > THE RJS TEMPLATES: empty_cart.rjs > page[:cart].visual_effect :puff > > <<<<<<<<<< end controller / rjs code > > > Log file Error: > ActionView::ActionViewError (No rhtml, rxml, rjs or delegate template > found for store/_empty_cart in > /home/jbateman/sandbox/depot/config/../app/views): > /usr/lib/ruby/gems/1.8/gems/actionpack-1.13.3/lib/action_view/base.rb:399:in > `find_template_extension_for'' > /usr/lib/ruby/gems/1.8/gems/actionpack-1.13.3/lib/action_view/base.rb:335:in > `pick_template_extension'' > /usr/lib/ruby/gems/1.8/gems/actionpack-1.13.3/lib/action_view/base.rb:249:in > `render_file'' > /usr/lib/ruby/gems/1.8/gems/actionpack-1.13.3/lib/action_view/base.rb:275:in > `render'' > > I ''feel'' I have researched this well and have a good understanding of > the flow of events ''behind the scenes'' (Thanks mostly to all of you who > have replied to me) but I''m still missing something that is not > ''clicking'' in my head on how to do this. > > Thanks!Wow... If I rename my .rjs file _empty_cart.rjs (from empty_cart.rjs) and NOT empty_cart.rjs the above code works, BUT, then the original code to ''empty the cart'' breaks with the SAME Errors found in the log file as I posted above. Now ''this'' doesn''t work: _cart.rhtml partial (that handles the cart and an "empty_cart" button.) <% form_remote_tag :url => { :action => :empty_cart } do %> <%= submit_tag "Empty cart" %> <% end %> The controller. def empty_cart session[:cart] = nil end The _empty_cart.rjs template page[:cart].visual_effect :puff This, to me, would be a sign of a BUG in the framework. -- 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 -~----------~----~----~----~------~----~------~--~---
Jean Nibee wrote:> > Wow... > > If I rename my .rjs file _empty_cart.rjs (from empty_cart.rjs) and NOT > empty_cart.rjs the above code works, BUT, then the original code to > ''empty the cart'' breaks with the SAME Errors found in the log file as I > posted above. > > Now ''this'' doesn''t work: > > _cart.rhtml partial (that handles the cart and an "empty_cart" button.) > > <% form_remote_tag :url => { :action => :empty_cart } do %> > <%= submit_tag "Empty cart" %> > <% end %> > > The controller. > def empty_cart > session[:cart] = nil > end > > The _empty_cart.rjs template > page[:cart].visual_effect :puff > > This, to me, would be a sign of a BUG in the framework.Okay so to fix my problem is as follows. To allow me to have an "Empty Cart" button, which calls the empty_cart action and render the empty_cart.rjs (automatically), AND have a remove_from_cart action that will call the empty_cart ONLY if the number of items in my cart reaches ZERO I have to have BOTH an empty_cart.rjs AND an _empty_cart.rjs file. The first is for the ''automatic'' rendering built into rails and the second is for my call to ''render :partial => "empty_cart"'' in the remove_from_cart action. Not very DRY nor very elegant... but I''m waiting for someone more versed in Rails to show me where I''m messing up. Thanks. -- 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 -~----------~----~----~----~------~----~------~--~---
What about: def empty_cart session[:cart] = nil render :partial => "empty_cart" end then you just need _empty_cart.rjs and can get rid of empty_cart.rjs. You do make a lot of view files when you start dealing with AJAX and RJS, it''s just how Rails is. But you can call any view file from any controller through the #render method. It''s also possible to run RJS code in your controller, like so: def empty_cart session[:cart] = nil render_update do |page| page.visual_effect :puff end end but I''m not a fan of this as it starts to muddle the line between View and Controller. Jason On 7/4/07, Jean Nibee <rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> > > Jean Nibee wrote: > > > > Wow... > > > > If I rename my .rjs file _empty_cart.rjs (from empty_cart.rjs) and NOT > > empty_cart.rjs the above code works, BUT, then the original code to > > ''empty the cart'' breaks with the SAME Errors found in the log file as I > > posted above. > > > > Now ''this'' doesn''t work: > > > > _cart.rhtml partial (that handles the cart and an "empty_cart" button.) > > > > <% form_remote_tag :url => { :action => :empty_cart } do %> > > <%= submit_tag "Empty cart" %> > > <% end %> > > > > The controller. > > def empty_cart > > session[:cart] = nil > > end > > > > The _empty_cart.rjs template > > page[:cart].visual_effect :puff > > > > This, to me, would be a sign of a BUG in the framework. > > Okay so to fix my problem is as follows. To allow me to have an "Empty > Cart" button, which calls the empty_cart action and render the > empty_cart.rjs (automatically), AND have a remove_from_cart action that > will call the empty_cart ONLY if the number of items in my cart reaches > ZERO I have to have BOTH an empty_cart.rjs AND an _empty_cart.rjs file. > > The first is for the ''automatic'' rendering built into rails and the > second is for my call to ''render :partial => "empty_cart"'' in the > remove_from_cart action. > > Not very DRY nor very elegant... but I''m waiting for someone more versed > in Rails to show me where I''m messing up. > > Thanks. > > -- > 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 -~----------~----~----~----~------~----~------~--~---
Jason Roelofs wrote:> What about: > > def empty_cart > session[:cart] = nil > render :partial => "empty_cart" > end > > then you just need _empty_cart.rjs and can get rid of empty_cart.rjs. >Good idea, Just weird I have to ''override'' the default behavior because sometimes you need _ and sometimes you don''t. I''ll live with it for now, I''ll keep default behavior until I have to do something special with it, at least when I do I''ll know what to do. Thanks to all for the advice. -- 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 -~----------~----~----~----~------~----~------~--~---