in my controller inventory_Controller I have a variable called @cart
that is set to @cart=find_cart in the beginning of each method.  The
cart is displayed on the left hand sidemenu, so each page like
inventory/review, inventory/dvd inventory/checkout has to have @cart
defined.
For some reason @cart gets defined for the first two, but not the last
one(checkout).
The only difference between the way I am redirecting to the pageis
that the first two are by links:
                <%= link_to "review", {:action =>
''review'', :title =>
album.title, :itemType => album.itemType} %>
		<a href=''/inventory/dvd''
class=''menuLink'' >DVD</a>
The last one is by a button:
<%= button_to "Check Out!" , :action => :check_out %>
Mind you, the button is also generated within a partial, butI don''t
think that would have any importance.  Any Insight?  Thanks
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---
Jon wrote:> in my controller inventory_Controller I have a variable called @cart > that is set to @cart=find_cart in the beginning of each method. The > cart is displayed on the left hand sidemenu, so each page like > inventory/review, inventory/dvd inventory/checkout has to have @cart > defined.Post your controller code, please. Peace. -- 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 -~----------~----~----~----~------~----~------~--~---
From experience I would use a before_filter to load the cart for you
controller...
Something like:
before_filter :initialize_cart
  private
  def initialize_cart
    if session[:cart_id]
      @cart = Cart.find(session[:cart_id])
    else
      @cart = Cart.create
      session[:cart_id] = @cart.id
    end
  end
If you have an action you don''t want the cart you can use :except =>
"name"
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---
Phillip , my inventory_controller.rb:
class InventoryController < ApplicationController
  def index
      @albums=Album.find(:all)
      @cart=find_cart
  end
  def add_to_cart
          itemType=params[:itemType]
               productId=(params[:id]) #parameter passed in from "add to
cart" submission, it''s either 1 or 2 in this case
               if itemType==''album''
                    product_temp=Album.find(productId)
                    dest=''/inventory''
                end
                if itemType==''dvd''
                    product_temp=Dvd.find(productId)
                    dest=''/inventory/dvd''
                end
product=Product.new(itemType,product_temp.title,product_temp.price)
               @cart=find_cart
               @cart.add_product(product)    #add the album to the cart in
the sessions
    redirect_to dest
  end
  def check_out
      @cart=find_cart
      redirect_to ''/inventory/checkOut''
    end
  def review
      @cart=find_cart #for shopping car display in the sidebar
      @title=(params[:title])
      @itemType=(params[:itemType])
      if @itemType==''album'' #must be a better way to reduce
the amount of
redundant code
          @album=Album.find_by_title(@title)
          @review=Review.new
          @reviews=@album.reviews #Review.find(:all, :conditions =>
["album
= ?", @title])
      end
      if  @itemType==''dvd''
          @dvd=Dvd.find_by_title(@title)
          @review=Review.new
          @reviews=@dvd.reviews #Review.find(:all, :conditions =>
["album ?", @title])
      end
  end
  def dvd
      @cart=find_cart
      @dvds=Dvd.find(:all)
    end
end
my application.rb:
# Filters added to this controller apply to all controllers in the
application.
# Likewise, all the methods added will be available for all controllers.
class ApplicationController < ActionController::Base
  helper :all # include all helpers, all the time
    # session :session_key => ''_inventory_session_id''
  # See ActionController::RequestForgeryProtection for details
  # Uncomment the :secret if you''re not using the cookie session store
  protect_from_forgery # :secret =>
''33dad663a17f28eb93b293523bcb06f2''
  def find_cart
       unless session[:cart] # if there''s no cart in the session
            session[:cart] = Cart.new # add a new one
        end #for the unless
    session[:cart] # return existing or new cart
       #session[:cart] ||=Cart.new #creates 1 cart session
       #can also be written more efficiently as above
  end
  def empty_cart
      session[:cart]=nil
      redirect_to ''/inventory''
    end
  def find_cart
       unless session[:cart] # if there''s no cart in the session
            session[:cart] = Cart.new # add a new one
        end #for the unless
    session[:cart] # return existing or new cart
  end
  def log_out
      session[:login]=nil
        redirect_to ''/inventory''
    end
end
find_cart is in application.rb and is used by many of the methods in my
inventory_controller file.  for some reason it doesn''t pull up any data
when
in the check_out method....
On Sun, Sep 28, 2008 at 2:14 PM, heimdull
<freddy-RCI/mp9mI1I6GGFevw1D/A@public.gmane.org> wrote:
>
> From experience I would use a before_filter to load the cart for you
> controller...
>
> Something like:
>
> before_filter :initialize_cart
>
>  private
>
>  def initialize_cart
>    if session[:cart_id]
>      @cart = Cart.find(session[:cart_id])
>    else
>      @cart = Cart.create
>      session[:cart_id] = @cart.id
>    end
>  end
>
> If you have an action you don''t want the cart you can use :except
=>
> "name"
>
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---
Heinbull,
I tried to use the before_filter in my Cart Model...mind you it''s not
an
actual sql table, it''s just a class I created.  From looking at
reference
tools it looks like before_filter is usually used for actualy table
models.... but I tried it any way and I got the error "undefined method
before_filter for Cart:Class".
My Cart.rb file reads:
class Cart
  attr_reader :items ,:total_price
  before_filter :initialize_cart
  def initialize
    @items = []
    @total_price=0
  end
  def add_product(product)
    current_item = @items.find {|item| ((item.product.title =product.title)
&&
(item.product.itemType==product.itemType)&&(item.product.itemType==product.itemType))}
    #pass in the item object, returns the one being added item where
item.album equals the
    #album is the title of the album in this case
    #traverses through the items array, if item[album]=album if the objects
match up then it adds the album
    if current_item
      current_item.increment_quantity
      current_item.increment_price
      @total_price=@total_price+product.price
    else
      @items << CartItem.new(product)
      @total_price=@total_price+product.price
    end
  end
  private
  def initialize_cart
      unless session[:cart] # if there''s no cart in the session
            session[:cart] = Cart.new # add a new one
        end #for the unless
    @cart=session[:cart]
    end
end
any insight?  it would be optimal if I could use the before_filter so i
owuldn''t have to do find_cart in every page controller
On Sun, Sep 28, 2008 at 3:59 PM, Jon Liu
<jonliu81-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
> Phillip , my inventory_controller.rb:
>
> class InventoryController < ApplicationController
>
>   def index
>       @albums=Album.find(:all)
>       @cart=find_cart
>   end
>
>
>
>   def add_to_cart
>           itemType=params[:itemType]
>                productId=(params[:id]) #parameter passed in from "add
to
> cart" submission, it''s either 1 or 2 in this case
>
>                if itemType==''album''
>                     product_temp=Album.find(productId)
>                     dest=''/inventory''
>                 end
>                 if itemType==''dvd''
>                     product_temp=Dvd.find(productId)
>                     dest=''/inventory/dvd''
>                 end
>
>
> product=Product.new(itemType,product_temp.title,product_temp.price)
>                @cart=find_cart
>                @cart.add_product(product)    #add the album to the cart in
> the sessions
>     redirect_to dest
>   end
>
>   def check_out
>       @cart=find_cart
>       redirect_to ''/inventory/checkOut''
>     end
>
>   def review
>       @cart=find_cart #for shopping car display in the sidebar
>       @title=(params[:title])
>       @itemType=(params[:itemType])
>
>       if @itemType==''album'' #must be a better way to
reduce the amount of
> redundant code
>           @album=Album.find_by_title(@title)
>           @review=Review.new
>           @reviews=@album.reviews #Review.find(:all, :conditions =>
["album
> = ?", @title])
>       end
>       if  @itemType==''dvd''
>           @dvd=Dvd.find_by_title(@title)
>           @review=Review.new
>           @reviews=@dvd.reviews #Review.find(:all, :conditions =>
["album > ?", @title])
>       end
>   end
>
>   def dvd
>       @cart=find_cart
>       @dvds=Dvd.find(:all)
>     end
>
> end
>
> my application.rb:
> # Filters added to this controller apply to all controllers in the
> application.
> # Likewise, all the methods added will be available for all controllers.
>
> class ApplicationController < ActionController::Base
>   helper :all # include all helpers, all the time
>     # session :session_key => ''_inventory_session_id''
>   # See ActionController::RequestForgeryProtection for details
>   # Uncomment the :secret if you''re not using the cookie session
store
>   protect_from_forgery # :secret =>
''33dad663a17f28eb93b293523bcb06f2''
>
>   def find_cart
>        unless session[:cart] # if there''s no cart in the session
>             session[:cart] = Cart.new # add a new one
>         end #for the unless
>     session[:cart] # return existing or new cart
>        #session[:cart] ||=Cart.new #creates 1 cart session
>        #can also be written more efficiently as above
>   end
>
>   def empty_cart
>       session[:cart]=nil
>       redirect_to ''/inventory''
>     end
>
>
>   def find_cart
>        unless session[:cart] # if there''s no cart in the session
>             session[:cart] = Cart.new # add a new one
>         end #for the unless
>     session[:cart] # return existing or new cart
>   end
>
>   def log_out
>       session[:login]=nil
>         redirect_to ''/inventory''
>     end
>
> end
>
>
> find_cart is in application.rb and is used by many of the methods in my
> inventory_controller file.  for some reason it doesn''t pull up any
data when
> in the check_out method....
>
>
> On Sun, Sep 28, 2008 at 2:14 PM, heimdull
<freddy-RCI/mp9mI1I6GGFevw1D/A@public.gmane.org> wrote:
>
>>
>> From experience I would use a before_filter to load the cart for you
>> controller...
>>
>> Something like:
>>
>> before_filter :initialize_cart
>>
>>  private
>>
>>  def initialize_cart
>>    if session[:cart_id]
>>      @cart = Cart.find(session[:cart_id])
>>    else
>>      @cart = Cart.create
>>      session[:cart_id] = @cart.id
>>    end
>>  end
>>
>> If you have an action you don''t want the cart you can use
:except =>
>> "name"
>>
>>
>> >>
>>
>
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---
All, I put the before_filter in my inventory_controller and it worked...didn''t see that it doesn''t belong in the Cart.rb file. Thanks for the help! Cheers Jon On Sun, Sep 28, 2008 at 4:03 PM, Jon Liu <jonliu81-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Heinbull, > > I tried to use the before_filter in my Cart Model...mind you it''s not an > actual sql table, it''s just a class I created. From looking at reference > tools it looks like before_filter is usually used for actualy table > models.... but I tried it any way and I got the error "undefined method > before_filter for Cart:Class". > > My Cart.rb file reads: > class Cart > attr_reader :items ,:total_price > before_filter :initialize_cart > > def initialize > @items = [] > @total_price=0 > end > > > def add_product(product) > current_item = @items.find {|item| ((item.product.title => product.title) && > (item.product.itemType==product.itemType)&&(item.product.itemType==product.itemType))} > > #pass in the item object, returns the one being added item where > item.album equals the > #album is the title of the album in this case > #traverses through the items array, if item[album]=album if the objects > match up then it adds the album > if current_item > current_item.increment_quantity > current_item.increment_price > @total_price=@total_price+product.price > else > @items << CartItem.new(product) > @total_price=@total_price+product.price > end > end > > private > def initialize_cart > unless session[:cart] # if there''s no cart in the session > session[:cart] = Cart.new # add a new one > end #for the unless > @cart=session[:cart] > end > > end > > > any insight? it would be optimal if I could use the before_filter so i > owuldn''t have to do find_cart in every page controller > > > On Sun, Sep 28, 2008 at 3:59 PM, Jon Liu <jonliu81-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > >> Phillip , my inventory_controller.rb: >> >> class InventoryController < ApplicationController >> >> def index >> @albums=Album.find(:all) >> @cart=find_cart >> end >> >> >> >> def add_to_cart >> itemType=params[:itemType] >> productId=(params[:id]) #parameter passed in from "add to >> cart" submission, it''s either 1 or 2 in this case >> >> if itemType==''album'' >> product_temp=Album.find(productId) >> dest=''/inventory'' >> end >> if itemType==''dvd'' >> product_temp=Dvd.find(productId) >> dest=''/inventory/dvd'' >> end >> >> >> product=Product.new(itemType,product_temp.title,product_temp.price) >> @cart=find_cart >> @cart.add_product(product) #add the album to the cart in >> the sessions >> redirect_to dest >> end >> >> def check_out >> @cart=find_cart >> redirect_to ''/inventory/checkOut'' >> end >> >> def review >> @cart=find_cart #for shopping car display in the sidebar >> @title=(params[:title]) >> @itemType=(params[:itemType]) >> >> if @itemType==''album'' #must be a better way to reduce the amount of >> redundant code >> @album=Album.find_by_title(@title) >> @review=Review.new >> @reviews=@album.reviews #Review.find(:all, :conditions => >> ["album = ?", @title]) >> end >> if @itemType==''dvd'' >> @dvd=Dvd.find_by_title(@title) >> @review=Review.new >> @reviews=@dvd.reviews #Review.find(:all, :conditions => ["album >> = ?", @title]) >> end >> end >> >> def dvd >> @cart=find_cart >> @dvds=Dvd.find(:all) >> end >> >> end >> >> my application.rb: >> # Filters added to this controller apply to all controllers in the >> application. >> # Likewise, all the methods added will be available for all controllers. >> >> class ApplicationController < ActionController::Base >> helper :all # include all helpers, all the time >> # session :session_key => ''_inventory_session_id'' >> # See ActionController::RequestForgeryProtection for details >> # Uncomment the :secret if you''re not using the cookie session store >> protect_from_forgery # :secret => ''33dad663a17f28eb93b293523bcb06f2'' >> >> def find_cart >> unless session[:cart] # if there''s no cart in the session >> session[:cart] = Cart.new # add a new one >> end #for the unless >> session[:cart] # return existing or new cart >> #session[:cart] ||=Cart.new #creates 1 cart session >> #can also be written more efficiently as above >> end >> >> def empty_cart >> session[:cart]=nil >> redirect_to ''/inventory'' >> end >> >> >> def find_cart >> unless session[:cart] # if there''s no cart in the session >> session[:cart] = Cart.new # add a new one >> end #for the unless >> session[:cart] # return existing or new cart >> end >> >> def log_out >> session[:login]=nil >> redirect_to ''/inventory'' >> end >> >> end >> >> >> find_cart is in application.rb and is used by many of the methods in my >> inventory_controller file. for some reason it doesn''t pull up any data when >> in the check_out method.... >> >> >> On Sun, Sep 28, 2008 at 2:14 PM, heimdull <freddy-RCI/mp9mI1I6GGFevw1D/A@public.gmane.org> wrote: >> >>> >>> From experience I would use a before_filter to load the cart for you >>> controller... >>> >>> Something like: >>> >>> before_filter :initialize_cart >>> >>> private >>> >>> def initialize_cart >>> if session[:cart_id] >>> @cart = Cart.find(session[:cart_id]) >>> else >>> @cart = Cart.create >>> session[:cart_id] = @cart.id >>> end >>> end >>> >>> If you have an action you don''t want the cart you can use :except => >>> "name" >>> >>> >>> >>> >>> >> >--~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---