Ruby on Rails - params 是方法还是哈希?

2024-01-01

所以,我正在尝试入门Ruby on Rails 指南部分here http://guides.rubyonrails.org/getting_started.html.

我不明白line http://guides.rubyonrails.org/getting_started.html#creating-articles在本教程中。引用它:

The 参数方法是表示来自表单的参数(或字段)的对象。

我以前确实有一些 Rails 方面的经验,而且我一直认为params是一个哈希值。但在这里他们称之为method which is an object.

Is params a method or a hash?另外,在 Ruby 中,方法也是对象吗?


  • params is a method返回一个ActionController::Parameters object。想像一下这样:

    def params
      ActionController::Parameters.new(...)
    end
    

    示例(在控制器或视图中的某个位置):

    puts params
    #=> <ActionController::Parameters ...>
    puts params.is_a? Object
    #=> true
    
  • A method在 Ruby 中总是返回一个value (note: nil也是一个value)除非那样method没有定义。但请记住params即使您在代码中没有看到它,Rails 已经定义了它)

  • a 的每个“返回值”method在 Ruby 中是object. Even nil值是一个NilClass object。整数、字符串、数组和哈希也是objects。为什么?因为 eveeeeery 事物继承/开始于Object class.

  • 如果

    • ActionController::Parameters继承自Hash class,这意味着您可以使用所有Hash methods (请参阅此处的哈希方法 https://apidock.com/ruby/Hash).

      Example:

      params.sort ...
      params.each ...
      params.has_key?(:controller)
      
  • 但现在 >= Rails 5.1:

    • ActionController::Parameters NO LONGER inherits from Hash class, so you would think that you can no longer use methods such as the above code like .sort, or .has_key?, but you still can! because ActionController::Parameters defines its own custom methods that "look like" methods from a Hash.
      • NOTE:并非所有 Hash 方法都在中重新定义ActionController::Parameters。随意比较这些方法HERE http://api.rubyonrails.org/classes/ActionController/Parameters.html and HERE https://apidock.com/ruby/Hash, 尤其sort方法是Hash方法没有被重新定义ActionController::Parameters,所以你不能这样做params.sortRails >= 5.1 中不再有此功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby on Rails - params 是方法还是哈希? 的相关文章

  • 将局部变量传递给视图加载后渲染的局部变量

    Update 我刚刚发现另一个线程解释了为什么我遇到这个问题 将本地 Rails 变量传递给 JavaScript 到部分 https stackoverflow com questions 12342058 pass local rail
  • Accepts_nested_attributes_for Rails 3 中的实际形式使用

    使用 Ruby on Rails 3 我半明白accepts nested attributes for是如何的supposed工作 但我无法找出以某种形式实现这一点的实用方法 例如 如果有人想在其用户页面中添加他们最近的位置 user r
  • 如何在 Rails 3 中连接表并计算记录数?

    我有一个Collection有很多硬币的类 我正在尝试选择拥有两枚以上硬币的收藏品 目前 我可以直接通过 Ruby 来完成此操作 但效率极低 我当前的代码 collections Collection all select c c coin
  • mongoid 中的嵌入文档与哈希数据类型

    我找不到任何讨论此问题的博客文章或文档 它们 嵌入式文档和哈希数据类型 非常相似 彼此相比有何好处或限制 考虑我的架构设计 class HistoryTracker include Mongoid Document include Mong
  • 从 Rails 2.3.8 升级到 4.0

    我正在 Rails 2 3 8 上运行一个应用程序 我计划将其升级到 Rails 4 0 RC 版 对我来说最简单的方法是什么 我需要先升级到 Rails 3 x 吗 注意 在我当前的实现中 我使用八哥和雪貂 作为升级的一部分 我也在考虑搬
  • YouTube 视频出现 Phantom JS 错误

    Phantom JS 版本 1 9 1 恶作剧版本 1 3 0 从今天开始 YouTube 嵌入视频在运行 javascript 测试时会出现 poltergeist 错误 我的 YouTube 代码只是默认的嵌入 YouTube 代码 这
  • 初始化会破坏rails中的布局设置吗?

    在其中一个控制器中 我需要特定的布局 我添加了layout一开始 效果很好 但如果我添加一个initialize某些基于控制器的变量的函数 Rails 似乎只是忽略了layout命令 有人有同样的问题吗 我该如何修复它 class Admi
  • Rails:将参数从视图传递到控制器

    我在 Rails 中有以下模型 class Task lt ActiveRecord Base attr accessible description name project belongs to project validates na
  • 列“users.id”必须出现在 GROUP BY 子句中或在聚合函数中使用

    关系 Item belongs to Product Product belongs to User 项目型号范围 scope search gt search term select products name users product
  • 带分页的 Rails 随机活动记录

    我需要查找特定资源的所有记录并以随机顺序显示它们 但具有一致的分页 如果开始分页 您将不会看到相同的记录两次 每次用户访问页面时 显示顺序都应该是随机的 我在用将分页 http wiki github com mislav will pag
  • 如何访问 has_many :through 关联对象的相关连接模型而不需要额外的查询?

    这是我现在已经遇到过很多次的事情 我很想弄清楚如何做我想要的事情 或者构建并向 Rails 提交一个补丁来实现它 很多时候 在我的应用程序中 我会有一些看起来像这样的模型 class User lt ActiveRecord Base ha
  • Rails 中的 ActionController::RoutingError (没有路由匹配 [GET] "/favicon.ico")

    我尝试过使用 还有这个 但我仍然在日志文件中看到此错误 ActionController RoutingError No route matches GET favicon ico favicon ico 位于 public 文件夹中 我也
  • 如何访问“可以?”细胞内的方法?

    我在用着cancan and cells我的 ruby on rails 项目中的 gems 如何访问can 细胞内的方法 Thanks 我必须这样做 尝试 class MyCell lt Cell Rails include CanCan
  • Rails 3:用户创建自定义表单?

    我正在尝试思考如何允许用户创建具有所有字段类型的自定义表单 如果有一颗宝石那就太好了 但我似乎无法在任何地方找到它 所以我有一个像这样的数据库设置 t integer form id t string name t string hint
  • 使用 Ruby 通过 Outlook 发送消息的最简单方法是什么?

    我的工作要求我为某些测试自动生成电子邮件 我一直在四处寻找 但一直未能找到可以快速实施的合理解决方案 它需要在 Outlook 中 而不是其他邮件服务器中 因为我们有一些奇怪的身份验证规则 并且我们需要保存草稿的选项 而不仅仅是发送消息 显
  • 忽略 GEM,因为它的扩展尚未构建

    在我的工作和家用计算机上 我最近将 Ruby 升级到 2 3 1 使用ruby install I use chruby作为我的 Ruby 切换器 我开始在我的终端中看到这个警告 Ignoring bcrypt 3 1 11 because
  • 如何在 Rails 3 中查看用户的实时活动?

    我想做的是让我的管理员用户能够实时 通过一些 AJAX jQuery 功能 看到我的用户正在做什么 我该如何去做呢 我认为它与会话活动有关 并且我已经开始将会话保存到数据库 而不是 cookie 但一般来说 我如何获取该信息并实时解析它 我
  • 在 RSpec 测试期间抑制控制台输出

    我正在测试在控制台上放置一些消息的类 包含 put p 警告等 我只是想知道在 RSpec 测试期间是否有能力抑制此输出 我压抑puts通过重定向在我的类中输出 stout到一个文本文件 这样 如果我出于任何原因需要查看输出 它就在那里 但
  • Rails:验证字符串的最小和最大长度,但允许其为空白

    我有一个想要验证的字段 我希望该字段能够留空 但如果用户输入数据 我希望它采用某种格式 目前我在模型中使用以下验证 但这不允许用户将其留空 validates length of foo maximum gt 5 validates len
  • Rails & Devise:如何在没有布局的情况下呈现登录页面?

    我知道这可能是一个简单的问题 但我仍在试图弄清楚Devise https github com plataformatec devise out 我想要render layout gt false在我的登录页面上 我怎样才能做到这一点Dev

随机推荐