4

我正在查看购物车的 rails 示例,在 ApplicationController 类中我看到如下代码:

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

所以它使用的是Cart.find(session[:cart_id])

然后我去 carts_controller.rb 和 CartController 类,我看到这样的代码:

 def update
    @cart = Cart.find(params[:id])

    respond_to do |format|

所以这里使用的是Cart.find(params[:id])

但我不明白为什么我们使用 session 来传递 AppController 中的参数,但我们在 CartController 中使用普通参数,我们可以使用 swithc 使用它们吗?还是 Rails 是如何工作的并且总是会话转到 AppController?如果有人可以更详细地解释这一点,那就太好了

4

1 回答 1

10

params存在于 url 或表单的帖子正文中,因此一旦进行查询,它就会消失。

会话在多个请求之间持续存在(信息通常存储在 cookie 中,但这取决于您的配置)。

简而言之:

  • 参数:仅一个请求(创建一个对象,访问一个特定页面)
  • 会话:要保留的信息(购物车、登录用户..)
于 2013-01-21T15:39:22.563 回答