2011-06-01 44 views
0

對象我有一個交易對象,並希望:Rails 3中創建一個外國型號

  1. 檢查一車會話存在。
  2. 如果是,則將交易與該會話中該購物車的ID相關聯。
  3. 如果否,則創建一個新的Cart對象並將其ID分配給會話變量。

的關係是:

Cart has_many Transactions 
Transaction belongs_to Cart 

我的問題是:你怎樣/什麼是創建事務控制器內的車對象和相關會議的最佳方式?

我想是這樣的交易新動作:

@cart = Cart.new 

而且,這種在交易創建行動:

@cart = Cart.new(params[:cart]) 
session[:cart] = @cart.id 

但是,不創建一個會話或車對象。而且,在Google上搜索時,我無法找到關於這種類型的文檔。有誰知道它是如何正確完成的?

回答

2
Cart.new 

...只會實例化一個新的車,但不會持續到數據庫中。 Cart對象需要存儲在數據庫中,如果要跨請求使用它的話。

使用該堅持的車對象:

Cart.create(params[:cart]) 

@cart.save! 

對於這一點:

session[:cart] = @cart.id 

...你已經通過存儲做了正確的事會話中的ID :)但請注意,您需要在每次請求時再次獲取。所以,你可以在你的application_controller.rb添加一個輔助的東西,如:

def current_cart 
    Cart.find_by_id(session[:cart]) 
end 

....這可能返回nil車。

+0

太棒了,謝謝! – Justin 2011-06-01 20:19:00

+0

我在這裏有一個後續問題:我嘗試使用session [:customer_id](存在)將customer_id添加到Cart對象,但當我執行@ cart.customer_id = session [:customer_id時,它不起作用]。當使用Cart.create方法時,是否有其他方式可以添加信息來填充控制器中的字段?再次感謝您的幫助! – Justin 2011-06-01 22:34:36

+1

將customer_id分配給它後,您需要保存購物車對象:'@ cart.save'。當使用'Cart.create'時,你可以提供一個散列參數,其中之一是':customer_id',或者你可以在創建對象後將它分配給對象,然後再保存它。 – Jits 2011-06-02 06:28:01