作者:Blunt_X | 来源:互联网 | 2023-02-03 14:47
所以,我想了入门的Ruby on Rails的的部分指导这里.
我不明白本教程中的一行.引用它:
该PARAMS方法是代表参数(或场)从表单来的在对象中.
我确实有一些以前的rails经验,我总是假设params
是一个哈希.但在这里他们称之为method which is an object
.
是params
一个method
还是一个hash
?另外,在ruby中,方法也是对象吗?
1> Jay-Ar Polid..:
params
是一个返回对象的方法.想想它是这样的:ActionController::Parameters
def params
ActionController::Parameters.new(...)
end
示例(控制器或视图中的某个位置):
puts params
#=>
puts params.is_a? Object
#=> true
Ruby中的方法总是返回一个值(注意:nil
也是一个值),除非没有定义该方法.请记住,params
即使你的代码中没有看到它已经由Rails定义了)
Ruby中方法的每个"返回值" 都是一个对象.甚至nil
价值也是一个NilClass
对象.整数,字符串,数组和哈希也是对象.为什么?因为eveeeeery事物从Object
类继承/开始.
如果
ActionController::Parameters
继承自Hash
类,这意味着您可以使用所有Hash
方法(请参阅此处的哈希方法).
例:
params.sort ...
params.each ...
params.has_key?(:controller)
但现在在> = Rails 5.1:
ActionController::Parameters
NO LONGER继承自Hash
类,所以你会认为你不能再使用像上面代码那样的方法了.sort
,或者.has_key?
你仍然可以!因为ActionController::Parameters
定义了自己的自定义方法,从"看起来像"方法Hash
.
注意:并非所有Hash方法都重新定义ActionController::Parameters
.随意比较的方法,这里和这里,尤其sort
是法Hash
法并没有重新定义ActionController::Parameters
,所以你不能做params.sort
对Rails> = 5.1了.
2> sawa..:
描述有点截断.确切地说,它应该被理解为:
该params
方法的返回值是[an]对象...
方法不是对象,但是当您执行方法时,它总是返回一个对象.在这种情况下,params
是一个方法,而不是一个对象,但有一个返回值,它是一个对象.
在旧版本的Rails中,返回值params
曾经是哈希值,但现在,它不是哈希值.
@EricDuminil嘿,不要试图混淆初学者.`Method`类的实例由名为`method`的方法创建,并且是一个对象.它与方法不同.
Eric先前的评论使我运行`puts方法(:params).source_location`.它引导我到https://github.com/rails/rails/blob/4b969ea417f097d217ff1f662d2fe8c406d21b99/actionpack/lib/action_controller/metal/strong_parameters.rb,在那里我真的看到了`params`方法;)