Controller类中session和params的区别

2024-01-22

我正在查看购物车的 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|

所以这里使用的是购物车.find(参数[:id])

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


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

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

简而言之:

  • params:仅一个请求(创建一个对象,访问一个特定页面)
  • 会话:要保留的信息(购物车、登录用户..)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Controller类中session和params的区别 的相关文章

  • Rails Active Model Serializer - has_many 并访问父记录

    我正在尝试使用 Active Model Serializer 构建一些 Rails 模型的 JSON 表示 其中一些模型嵌入了其他模型 例如 我有活动和参加者 活动 has and belongs to many 参加者 class Ev
  • Ruby on Rails / Devise - 重置密码时绕过模型中的自定义验证选项

    在我的项目中 我更改了 Devise 中的注册表单 以通过访问器添加 agree 选项 用户必须接受服务条款才能注册等 如果他们不同意 则无效 当用户尝试编辑其帐户信息以寻求 agree 验证时 这导致了问题 但我能够添加一个 unless
  • docker环境下日志不保存到文件

    在我的生产环境中production rb 我已配置我的日志将保存到文件中 config logger Logger new log production log 当我在本地运行时 使用命令行启动服务器rails s e productio
  • 如何将 current_user 传递给 Sidekiq 的 Worker

    我正在努力通过current user or User find 1 到工作模块 但在 sidekiq 的仪表板中出现错误 localhost 3000 sidekiq retries NoMethodError 未定义方法 支持 字符串
  • Rube.exe:Babun 中没有这样的文件或目录

    我正在尝试在 Babun 中安装 ruby gems 以便我可以安装 sass 和 compass 但不断收到错误 C RailsInstaller Ruby2 1 0 bin ruby exe No such file or direct
  • Rails/Passenger/Node.js:ExecJS“找不到 JavaScript 运行时”

    我正在尝试使用 Node js 作为我的 Rails 应用程序的 JavaScript 运行时 我在 Ubuntu 12 0 4 上使用 Phusion Passenger 模块和 Nginx 作为我的 Web 服务器 每次我访问 Rail
  • 表单提交按钮仅在重新加载后才有效

    我有一个构建表的索引页 我试图允许用户编辑表中的行 我试图以最基本的方式做到这一点 没有 javascript ajax 等 除非 Rails 提供了它 我的表在索引方法中显示良好 并且有一个表单作为表中的最后一行 可用于添加新行 新的形式
  • javascript - Twitter bootstrap jquery 插件未编译用于生产

    我正在使用 Twitter Bootstrap 开发 3 1 Rails 应用程序塞胡纳克的宝石 https github com seyhunak twitter bootstrap rails 在生产模式下 我可以通过管道预编译使用基本
  • 在社交媒体 Ruby On Rails 上共享链接时的小预览

    我正在开发一个前端位于的网站angularjs和后端ROR Same ROR API用于android app还 现在我这里有一个情况 我需要在社交媒体上分享我的网站帖子 例如facebook twitter and google plus
  • Rails 3.1 引擎迁移不起作用

    我正在创建一个带有迁移的 Rails 3 1 引擎 rake db migration 在该引擎和主机应用程序内运行良好 但我需要将此引擎包含到另一个 Rails 引擎中 第二个引擎包含用于测试的虚拟应用程序 我将这一行添加到该虚拟应用程序
  • Delayed_job不会运行用户定义的方法

    我一直在尝试让 DelayedJob 在后台运行一些用户定义的方法 对于这个测试用例 我在助手中定义了以下方法 def test case u User new u first name JimBob u last name joe u e
  • Ruby on Rails - 复选框未保存到数据库?

    我有一个迁移 它使用布尔值并在其视图中生成一个复选框 但是 无论我单击什么 保存到数据库的值都不会受到影响 我的迁移看起来像这样 def self up create table blogposts do t t string title
  • 如何避免ActiveRecord模型双重保存?

    型号 一 class One lt ActiveRecord Base before save do stuff private def do stuff two Two find 8 two field2 Value two save e
  • 从邮件程序访问助手?

    我试图从 Rails 3 邮件程序访问帮助程序方法 以便访问会话的当前用户 我将 helper application 放在我的邮件程序类中 这似乎可以工作 但其中定义的方法对我的邮件程序不可用 我收到未定义的错误 有谁知道这应该如何运作
  • Rails Accepts_nested_attributes_for 子级在验证时没有设置父级

    验证时 我试图在子模型中访问我的父模型 我在 has one 上发现了一些关于反向属性的信息 但我的 Rails 2 3 5 无法识别它 因此它一定从未进入发行版 我不确定这是否正是我所需要的 我想根据父属性有条件地验证子属性 我的父模型已
  • 寻找在 Ruby on Rails 中构建安全 REST API 的建议

    我正开始为我正在从事的项目构建 REST API 这促使我对使用 RoR 构建 API 的最佳方法进行了一些研究 我很快发现 默认情况下 模型是向世界开放的 只需在 URL 末尾添加 xml 并传递适当的参数即可通过 URL 进行调用 那么
  • Rails:RSpec - nil:NilClass 的未定义方法“cookie_jar”

    铁轨新手 尝试遵循迈克尔 哈特尔的教程 尝试添加辅助方法来模拟 RSpec 测试中的日志时陷入困境 describe when the a user has logged in and attempts to visit the page
  • 嵌套表单的解决方案

    我已经被这个问题困扰了一段时间 需要制作一个表格比赛 category与自定义输入 它应该取所有值信息表并构建输入 但棘手的部分是它应该保存到类别 信息 table class Competition lt ApplicationRecor
  • Rails 轮胎 Elasticsearch 奇怪的错误

    我已经索引了Car拥有一辆车记录的车型mercedes benz在数据库中 如果我搜索这个词benz我收到错误 ActiveRecord RecordNotFound in CarsController index Couldn t fin
  • nginx 504 网关超时

    我正在 nginx 上使用 phusion passenger 运行 Rails3 0 7 项目 当我正在做 ajax 时 大约需要 15 分钟来处理 调用 ajax 10 分钟后 它会跳出一个 Firebug 错误 显示 504 Gate

随机推荐

  • 如何使用 BEM 方法构建自适应网页的 css?

    对于固定布局使用 BEM 很容易 带有媒体查询的自适应网页的 CSS 样式结构是怎样的 html 示例 div class t news div class t news post b post div class b post title
  • 按钮setBackgroundColor无高亮效果

    当我创建一个按钮时 Button myButton new Button this myButton setText Click Me 它创建一个按钮 单击该按钮时 该按钮会变成 橙色 以指示单击 添加到按钮时 button setBack
  • 使用 Qt 进行 C++0x 编程

    有人使用 C 0x 使用 Qt 进行过编程吗 效果如何 是否可以使用 C 0x 的所有优秀功能 您使用什么编译器和版本 我目前使用 gcc 4 6 并尝试所有 c 0x 功能 但我还没有对 Qt 做任何事情 Qt 几乎取代了所有标准库功能
  • 将语言字符转换为拉丁字母

    我尝试编写一个应用程序来学习外文字符 例如 如果您想学习日语 那么您必须记住所有平假名 片假名和汉字字母 例如 平假名 片假名本 学 汉字 例子 一些用户正在尝试学习日语 所以他必须学习 卡本 hon 含义 基础 书 这个 而且他还必须学习
  • SQL查询获取多次出现的值

    我需要查询数据库以显示表中姓氏出现超过 3 次的记录 示例 在我的学生表中 有 3 个姓氏为 Smith 的人 4 个姓氏为 Johnson 1 个姓氏为 Potter 我的查询应该显示姓氏为 Smith 和 Johnson 的记录 因为这
  • 在 matlab 中直观地将数据分为两类

    我有两个数据簇 每个簇都有 x y 坐标 和一个知道其类型的值 1 class1 2 class 2 我已经绘制了这些数据 但我想用边界 视觉上 分割这些类 做这样的事情的功能是什么 我尝试了轮廓 但没有帮助 考虑一下这个分类 http e
  • 不要在 Apache access.log 中记录某些请求

    我最近用自托管分析工具 Piwik 取代了 Google Analytics 这意味着每次有人连接我的网站http www mywebsite com http www mywebsite com 在客户端上执行 Javascript 跟踪
  • Python:获取可调用函数参数的名称

    如何获取作为参数传递给另一个函数的可调用函数的字符串表示形式 def foo print This is my callback function def bar callback None print something bar foo
  • C++ 中位字段的特征

    Reading https en cppreference com w cpp language bit field https en cppreference com w cpp language bit field 下列结论正确吗 相邻
  • 使 git pull (rebase) 默认仅从当前下游分支拉取

    我正在使用我发现的方法默认情况下拉 rebase http d strelau net post 47338904 git pull rebase by default进行 git pull 时 现在我想让 git pull 默认情况下仅拉
  • 获取房产指南

    这是上下文 我正在尝试为 经过身份验证的用户 组设置一堆属性 为此 我编写了以下脚本 GETTING AUTHENTICATED USERS SID sid1 S 1 5 11 objSID1 New Object System Secur
  • @ImportAutoConfiguration 和 @Import 有什么区别

    是不是真的org springframework boot autoconfigure ImportAutoConfiguration是改进的替代品org springframework context annotation Import因
  • 中央流光按钮

    如何使用 Streamlit 将按钮居中以使该按钮仍然可单击 这是返回随机数的按钮的一个小示例 import streamlit as st import numpy as np if st button Click rand np ran
  • 运行简单后台任务的最简洁方法?

    我已经看到至少五种模式 通过它们您可以在工作线程中运行一些代码 最简单 new Thread new Runnable public void run start 我们可以延长AsyncTask 我们有AsyncTaskLoader和别的L
  • 通过 COM 从 Ruby 调用 C# .dll

    我正在尝试在 Ruby 代码中调用 C 中的一些方法 首先 我在 Visual Studio 2008 中创建一个 dll 我在构建时注册 COM 互操作 为了测试这个新过程 我用 C 创建了一个简单的 DivideTwo 小方法 publ
  • SVG 的 PHP CSS 控制

    我正在尝试使用 CSS 来控制 svg 文件的颜色 我使用 html 来调用 svg 我页面上的颜色由 php 控制 其他所有内容都在 php 中 我确信我一定错过了一个步骤 因为我无法获取颜色 php 页面来控制 svg div clas
  • 如何从 Golang 的 Slice 中删除元素

    fmt Println Enter position to delete fmt Scanln pos new arr make int len arr 1 k 0 for i 0 i lt len arr 1 if i pos new a
  • 如何获取DNS中的TTL(Time To Live)?

    我想监控 DNS 地址 我需要得到TTL 生存时间 告诉我 DNS 记录何时到期 C 中如何获取TTL Net 示例代码位于C NET DNS 查询组件 http www codeproject com Articles 12072 C N
  • 在 Unix 中删除 ANSI 颜色转义的最佳方法

    我有一个 perl 程序 它用颜色打印输出 如果我重定向文件中的输出并在 vi 中打开它 我会看到颜色特殊字符 像这样的东西 31 43mAnd this is red on yellow too 0m 从输出文件中删除此颜色字符的最佳方法
  • Controller类中session和params的区别

    我正在查看购物车的 Rails 示例 在 ApplicationController 类中我看到如下代码 class ApplicationController lt ActionController Base protect from f