1

当我读到《Agile web development with rails,Task 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
4

2 回答 2

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])

于 2013-05-28T07:39:12.517 回答
1

购物车有很多 line_item。购物车和 line_items 之间存在一对多的关系。所以购物车的 id 将是 line_items 中的外键,即 cart_id。

:cart_id 包含 cart_id 的值。

因此,在方法 current_cart 中,您试图找到 id 等于 cart_id 的购物车。

如果 id = cart_id 的卡不存在,那么它会抛出错误,并在救援块中创建新的购物车并将其 id 保存到 session[:cart_id] 并返回购物车。

于 2013-05-28T07:41:04.633 回答