Ruby on rails 参数[key]。实例\u评估Ruby解释?
我正在回顾一个名为Mailboxer的RubyGem,它允许您在Rails应用程序中实现一个简单的私有消息传递系统。Github上有一个示例应用程序,我不完全理解。在控制器()中,作者使用以下操作: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
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项目的作者,但您不能传递整个:对话参数和任何相关值吗?为什么要将其分开?