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

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

我不明白本教程中的一行 。 引用它:

params方法是表示从表单进入的参数(或字段)的对象。

我确实有一些以前在rails中的经验,我总是认为params是一个哈希。 但在这里,他们称之为method which is an objectmethod which is an object

paramsmethod还是hash ? 另外,在ruby中,方法也是对象吗?

  1. 描述有点截断。 确切地说,它应该被理解为:

    params方法的返回值是[an]对象……

    方法不是对象,但是当您执行方法时,它总是返回一个对象。 在这种情况下, params是一个方法,而不是一个对象,但有一个返回值,它是一个对象。

  2. 在旧版本的Rails中, params的返回值曾经是一个哈希值,但现在,它不是一个哈希值。

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

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

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

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

  • Ruby中方法的每个“返回值”都是一个对象 。 甚至nil值也是NilClass 对象 。 整数,字符串,数组和哈希也是对象 。 为什么? 因为eveeeeery事物从Object inheritance/启动。

  • 如果

    • ActionController::Parametersinheritance自Hash ,这意味着您可以使用所有Hash 方法 ( 请参阅此处的Hash方法 )。

      例:

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

    • ActionController::Parameters NO LONGERinheritance自Hash ,所以你会认为你不能再使用像.sort.has_key?这样的代码之类的方法了.has_key? ,但你还可以! 因为ActionController::Parameters定义了自己的自定义方法,这些方法来自Hash “看起来像”方法。
      • 注意:并非所有Hash方法都在ActionController::Parameters中重新定义。 随意比较HERE和HERE的方法,特别是在ActionController::Parameters没有重新定义Hash方法的sort方法,所以你不能再在Rails> = 5.1中做params.sort

params是一个返回对象的方法 – ActionController::Parameters实例。

它有一些方法使它的行为很像哈希,但它比哈希复杂一点。

另外,在Ruby中,方法也是对象吗?

检查这个post 。