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
-~----------~----~----~----~------~----~------~--~---

Reply via email to