如何使用:cart_id按会话查找当前购物车?

时间:2013-05-28 07:32:08

标签: ruby-on-rails ruby

当我阅读使用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

2 个答案:

答案 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]并返回购物车。