Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 参数[key]。实例\u评估Ruby解释?_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 参数[key]。实例\u评估Ruby解释?

Ruby on rails 参数[key]。实例\u评估Ruby解释?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在回顾一个名为Mailboxer的RubyGem,它允许您在Rails应用程序中实现一个简单的私有消息传递系统。Github上有一个示例应用程序,我不完全理解。在控制器()中,作者使用以下操作: def conversation_params(*keys) fetch_params(:conversation, *keys) end def message_params(*keys) fetch_params(:message, *keys) end

我正在回顾一个名为Mailboxer的RubyGem,它允许您在Rails应用程序中实现一个简单的私有消息传递系统。Github上有一个示例应用程序,我不完全理解。在控制器()中,作者使用以下操作:

  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,*subkey)
方法从
key
参数(:conversation或:message)指定的参数中获取散列,并从中获取
subkey
参数指定的属性的信息:

  • 如果没有传递子键,则只返回普通参数[key](例如
    fetch_params(:conversation)=params[:conversation]
  • 如果只传递了一个元素,那么它将只返回它的值(例如
    fetch_params(:message,:body)==params[:message][:body]
  • 如果传递了多个子键,它将为每个子键返回值(例如,
    fetch_参数(:conversation,:body,:subject)==(params[:conversation][:body],params[:conversation][:subject])
基本上,
*
在最后一个参数之前告诉ruby将所有对应的属性打包到一个参数中,例如
获取参数(:message,:one,:two,:three)=>子键==[:one,:two,:three]

然后在数组之前添加
*
,ruby会将数组扩展为多个参数,例如
*[:1,:2,:3]==:1,:2,:3


现在更清楚了吗?

非常感谢您花时间写出来!这肯定会有很大帮助。现在,我知道您不是链接Github项目的作者,但您不能传递整个:对话参数和任何相关值吗?为什么要将其分开?