2

我是 RoR 的新手,正在尝试做“Pragmatic Agile Web Development”depot 应用程序。应用程序需要跟踪买家添加到购物车的所有商品。

这是 Cart 模型的创建:

rails generate scaffold cart

这是应用程序控制器代码:

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

我的问题:

  1. 在“脚手架”命令中,我没有为此表指定任何列名,但购物车似乎仍然有一个名为“id”的列。脚手架命令是否自动生成“id”列?
  2. 在此救援块中,创建了一个新的 Cart 对象,而没有将任何值设置为“Card.id”。在下一行,我们将这个“id”值分配给“session[:cart_id] = cart.id”。将存储的值是多少?

您的回答将不胜感激,

谢谢

4

1 回答 1

2

1 的答案:id的,是脚手架生成器自动生成的自动递增的 id 列。每次创建一个新条目时,都会生成一个新的 id。

2 的答案:cart_id是的,除非它可以通过已存储在会话中的对象找到一个新对象,否则会创建 Cart 的一个新对象。因此,在创建新购物车后,它会将新的购物车保存cart_id在会话中以供将来使用。就像控制器再次调用current_cart函数时的下一个请求一样,它也会cart_idsession相应的Cart对象中获取一个有效的对象。

如果您并不真正了解sessionROR 中的会话是如何处理的,那么您可以点击这些链接。

让我知道任何令人困惑的事情。

于 2012-11-01T09:28:47.780 回答