2012-11-01 36 views
2

我是RoR的新手,试图做“实用的敏捷Web开发”软件仓库应用程序。 应用程序需要跟踪买方添加到购物车的所有物品。Rails:Card.id没有任何价值

这里是车模型的建立:

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. 在 “脚手架” 命令我没有为此表指定任何列名称,但Cart仍然有一列叫做“id”。 scaffold命令是否自动生成“id”列?
  2. 在此救援块中,将创建一个新的Cart对象,但不将值设置为“Card.id”。在下一行,我们将这个“id”值赋给“session [:cart_id] = cart.id”。什么是将被存储的价值?

你的答案可以理解的,

感谢

答案1

回答

2

id是由脚手架生成器自动生成自动增量的ID列。每次创建新条目时,都会生成一个新的ID。

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

如果您没有真正意识到session或ROR中的会话处理方式,那么您可以按照这些链接进行操作。会话的

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