gpt4 book ai didi

ruby-on-rails - Ruby on Rails - 参数是方法还是散列?

转载 作者:数据小太阳 更新时间:2023-10-29 07:09:03 24 4
gpt4 key购买 nike

所以,我正在尝试 Ruby on Rails 指南的入门部分 here .

我不明白 line在本教程中。引用它:

The params method is the object which represents the parameters (or fields) coming in from the form.

我以前确实有一些 Rails 方面的经验,而且我一直假设 params 是一个散列。但这里他们称之为方法,它是一个对象

params方法 还是哈希?还有,在ruby中,方法也是对象吗?

最佳答案

  • params 是一个返回 ActionController::Parameters 对象方法。可以这样想:

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

    示例(在您的 Controller 或 View 中的某处):

    puts params
    #=> <ActionController::Parameters ...>
    puts params.is_a? Object
    #=> true
  • Ruby 中的方法总是返回一个(注意:nil 也是一个 ) 除非未定义该方法。请记住,尽管 params 已经由 Rails 定义,即使您没有在代码中看到它也是如此)

  • Ruby 中方法 的每个“返回值”都是一个对象。甚至 nil 值也是一个 NilClass 对象。整数、字符串、数组和哈希也是对象。为什么?因为每个东西都是从 Object class 继承/开始的。

  • 如果

    • ActionController::Parameters 继承自Hash class,也就是说你可以使用所有的Hash 方法 ( see Hash methods here )。

      示例:

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

    • ActionController::Parameters NO LONGER 继承自 Hash class,所以你会认为你不能不再使用像上面代码中的 .sort.has_key? 这样的方法,但你仍然可以!因为 ActionController::Parameters 定义了它自己的自定义方法,这些方法“看起来像”来自 Hash 的方法。
      • 注意:并不是所有的 Hash 方法都在 ActionController::Parameters 中重新定义。随意比较方法HEREHERE ,特别是 sort 方法,它是 Hash 方法,没有在 ActionController::Parameters 中重新定义,所以你不能做 params。在 Rails >= 5.1 中不再排序

关于ruby-on-rails - Ruby on Rails - 参数是方法还是散列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44069348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com