Controller类中的session和params之间的区别

时间:2013-01-21 15:36:11

标签: ruby-on-rails

我正在查看购物车的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(会话[:cart_id])

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

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

    respond_to do |format|

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

但我无法理解为什么我们使用session在AppController中传递params但是我们在CartController中使用了普通的params并且我们可以使用swithc来使用它们吗?或者是rails如何工作并且会话总是进入AppController?如果有人可以更详细地解释这一点,那将是非常好的

1 个答案:

答案 0 :(得分:9)

params位于表单的网址或帖子正文中,因此只要查询完成就会消失。

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

简短:

  • params:仅一个请求(创建一个对象,访问一个特定页面)
  • session:要保留的信息(购物车,已登录用户..)