ruby-on-rails - Rails 参数方法 : Why can it be accesse

查看这段代码:

参数[: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/

相关文章:

assembly - 如果 x86 jmp 跳转到其他两个连续有效地址之间的地址会发生什么?

javascript - MongooseServerSelectionError:连接 ECONN

angular - AWS Lambda@Edge Viewer 请求失败,返回 'The body

python - python解释器是否隐含地使用了中国余数定理?

reactjs - 如何更改Chakra UI Toast组件的背景颜色?

r - 从 R 中的数据帧列表中进行子集化

c++ - 创建一个线程安全的原子计数器

android - 如何在 Room MVVM 架构中实现 Koin 依赖注入(inject)

python - Linux Mint Cinnamon 错误打开设置(没有名为 'PIL' 的模块

c++ - 嵌套 std::map 的单行查找