当我阅读使用rails的敏捷Web开发,任务D时,我感到很困惑。
我知道基类中的current_cart方法可以按会话找到目标购物车。但是,我不知道sysbol:card_id来自哪里。
当lineItemController调用current_cart方法时,值是什么:cart_id?
更重要的是,我已经运行了常见的“rails generate scaffold line_item product_id:integer cart_id integer”。这两种cart_id之间有什么关系?
class ApplicationController < ActionController::Base
protect_from_forgery
private
def current_cart
Cart.find(session[:cart_id])
rescue ActiveRecord::RecordNotFound
cart = Cart.create
session[:cart_id] = cart.id
cart
end
end
答案 0 :(得分:1)
最初session[:cart_id]
的值将为nil,因此Cart.find(session[:cart_id])
将抛出错误,因此执行救援块的代码。它做了三件事
1. Create a new Cart
2. Save the id of newly created Cart in session
3. return the newly created cart
当调用相同的方法时,它将只返回Cart.find(session[:cart_id])
答案 1 :(得分:0)
购物车有很多line_items。购物车和line_items之间存在一对多的关系。 因此,购物车的ID将是line_items中的外键,即cart_id。
:cart_id包含cart_id的值。
因此,在方法current_cart中,您正在尝试查找id等于cart_id的购物车。
如果id = cart_id的卡片不存在,则会抛出错误,在救援区块中,它会创建新购物车并将其ID保存到会话[:cart_id]并返回购物车。