查看这段代码:
参数[:id]
Params 被认为是一种方法。如果我在那里错了,请纠正我。但这就像从哈希中读取一样。所以,我目前很困惑。
如果 params 是一个方法:显示的代码示例如何工作?
最佳答案
params
是一个方法,你是对的,但是这里的 params
方法返回一个 ActionController::Parameters
的实例,我们调用 hash访问器方法 #[]
就可以了。
这是 ruby 中调用返回对象方法的常见模式。让我们通过一个简单的例子来看一下:
def params
{
id: 101,
key: 'value',
foo: 'bar'
}
end
params[:id] # => 101
params[:foo] # => 'bar'
正如您在示例中看到的,方法 params
返回一个哈希对象,我们在返回的对象上调用哈希访问器方法 #[]
。
对 rails params
方法的引用:https://github.com/rails/rails/blob/5e1a039a1dd63ab70300a1340226eab690444cea/actionpack/lib/action_controller/metal/strong_parameters.rb#L1215-L1225
def params
@_params ||= begin
context = {
controller: self.class.name,
action: action_name,
request: request,
params: request.filtered_parameters
}
Parameters.new(request.parameters, context)
end
end
ruby 初学者须知:在ruby 中,我们可以调用不带括号的方法。所以,上面的调用等同于 params()[:id]
。
关于ruby-on-rails - Rails 参数方法 : Why can it be accessed like a hash?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69505389/