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:要保留的信息(购物车,登录用户..)