params
是一个方法,返回一个 ActionController::Parameters
对象。可以将其类比为:
params
是一个方法,返回一个 ActionController::Parameters
对象。可以将其类比为:
def params
ActionController::Parameters.new(...)
end
示例(在您的控制器或视图中的某个地方):
puts params
#=> <ActionController::Parameters ...>
puts params.is_a? Object
#=> true
方法在Ruby中总是返回一个值(注意:nil
也是一个值),除非该方法未定义。请记住,即使你在代码中看不到它,params
已经被Rails定义了。
Ruby中每个方法的“返回值”都是一个对象,甚至nil
值也是一个NilClass
对象。整数、字符串、数组和哈希表也是对象。为什么?因为一切都继承/从Object
类开始。
如果小于Rails 5.1:
ActionController::Parameters
继承自Hash
类,这意味着你可以使用所有的Hash
方法(点击此处查看Hash方法)。
示例:
params.sort ...
params.each ...
params.has_key?(:controller)
但是在 Rails 5.1 及以上版本中:
ActionController::Parameters
不再继承自Hash
类,因此您可能认为您不能再使用诸如上面代码中的.sort
或.has_key?
等方法了,但实际上仍然可以!因为ActionController::Parameters
定义了自己的自定义方法,这些方法“看起来像”从Hash
继承而来的方法。
描述略有缩短。确切地说,应该阅读为:
params
方法的返回值是一个对象...
方法不是一个对象,但是当您执行一个方法时,它总是会返回一个对象。在这种情况下,params
是一个方法,而不是一个对象,但它有一个返回值,即一个对象。
在旧版本的 Rails 中,params
的返回值曾经是哈希,但现在不再是哈希了。
Method
类的实例是由名为method
的方法创建的,并且是一个对象。它与方法本身是不同的。 - sawaputs method(:params).source_location
。这使我找到了https://github.com/rails/rails/blob/4b969ea417f097d217ff1f662d2fe8c406d21b99/actionpack/lib/action_controller/metal/strong_parameters.rb,我在那里真正看到了`params`方法 ;) - mridulaparams
是一个返回对象的方法 - 它返回 ActionController::Parameters
的实例。
它有一些方法,使其的行为类似于哈希表,但它比哈希表更复杂。
在 Ruby 中,方法也是对象吗?
params
是对象还是方法的问题。 - Andrey Deineko