我有一个Transaction对象,想要:
- 检查购物车会话是否存在
- 如果是,请将交易与会话中的购物车ID相关联
- 如果没有,则创建一个新的Cart对象,并将其ID分配给会话变量
关系是:
Cart has_many Transactions
Transaction belongs_to Cart
我的问题是:如何/在事务控制器中创建Cart对象和关联会话的最佳方式是什么?
我在交易新操作中尝试了这样的操作:
@cart = Cart.new
并且,这在事务创建操作中:
@cart = Cart.new(params[:cart])
session[:cart] = @cart.id
但是,这不会创建会话或Cart对象。而且,在谷歌上搜索时,我找不到这类东西的文档。有人知道如何正确地完成吗?
Cart.new
将只实例化一个新的Cart,但不会将其持久化到数据库中。如果要在请求中使用Cart对象,则需要将其存储在数据库中。
使用此选项可持久化Cart对象:
Cart.create(params[:cart])
或
@cart.save!
为此:
session[:cart] = @cart.id
通过在会话中存储ID,您做了正确的事情:)但请注意,每次请求都需要再次获取ID。所以你可以在你的application_controller.rb
中添加一个助手,比如:
def current_cart
Cart.find_by_id(session[:cart])
end
其可以返回CCD_ 2推车。