gpt4 book ai didi

ruby-on-rails - params[key].instance_eval Ruby 解释?

转载 作者:太空宇宙 更新时间:2023-11-03 16:02:13 24 4
gpt4 key购买 nike

我正在审查一个名为 Mailboxer 的 Ruby gem,它允许您在 Rails 应用程序中实现一个简单的私有(private)消息传递系统。 Github 上有一个我不完全理解的示例应用程序。在 Controller ( click here ) 中,作者使用了以下操作:

  def conversation_params(*keys)
fetch_params(:conversation, *keys)
end

def message_params(*keys)
fetch_params(:message, *keys)
end

def fetch_params(key, *subkeys)
params[key].instance_eval do
case subkeys.size
when 0 then self
when 1 then self[subkeys.first]
else subkeys.map{|k| self[k] }
end
end
end

我认为我的第一个问题是 fetch_params 操作到底在做什么?我对此进行了一些研究,似乎这是从 URL 获取 id(通过 GET 方法),但为什么呢?由于我不熟悉这个主题,因此我将不胜感激。谢谢!!

最佳答案

我会尝试解释它是如何工作的,但这有点棘手。

fetch_params(key, *subkeys) 方法从 key 参数(:conversation 或 :message)指定的参数中获取哈希值,并从中获取信息用于subkeys 参数指定的属性:

  • 如果没有传递子键,那么它将只返回普通的 params[key](例如 fetch_params(:conversation) == params[:conversation]
  • 如果只传递了一个元素,那么它只会返回它的值(例如 fetch_params(:message, :body) == params[:message][:body]
  • 如果传递了多个子键,它将返回每个子键的值(例如 fetch_params(:conversation, :body, :subject) == (params[:conversation][:body], params[:conversation ][:subject])

基本上,在最后一个参数之前的 * 告诉 ruby​​ 将所有对应的属性打包到一个参数中,例如fetch_params(:message, :one, :two, :three) => 子键 == [:one, :two, :three]

然后你在数组前添加 * ,ruby 会将你的数组扩展为多个参数,例如*[:one, :two, :three] == :one, :two, :three.

是不是有点清楚了?

关于ruby-on-rails - params[key].instance_eval Ruby 解释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21866862/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com