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 <[EMAIL PROTECTED]> 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 > @[EMAIL PROTECTED] > else > @items << CartItem.new(product) > @[EMAIL PROTECTED] > 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 <[EMAIL PROTECTED]> 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 >> @[EMAIL PROTECTED] #Review.find(:all, :conditions => >> ["album = ?", @title]) >> end >> if @itemType=='dvd' >> @dvd=Dvd.find_by_title(@title) >> @review=Review.new >> @[EMAIL PROTECTED] #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 <[EMAIL PROTECTED]> 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@googlegroups.com 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 -~----------~----~----~----~------~----~------~--~---