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

我正在查看购物车的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中传递params但是我们在CartController中使用了普通的params并且我们可以使用swithc来使用它们吗? 或者是rails如何工作并且会话总是进入AppController? 如果有人能够更详细地解释这一点,那将是非常重要的

params存在于表单的url或post体中,因此在查询完成后它就会消失。

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

简而言之:

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