我有下一个代码(他们不工作):
def search_form(opts={})
# Default options to form_tag
default = { method: "post", controller: "search" }
default.merge!(opts)
render :layout => "welcome/search" do
form_tag(default.extract!) do
"Privet"
end
end
end
所以我的帮助器中有默认选项,此代码接收选项作为参数。 我怎么能(解包)我的哈希并且不要写出丑陋的代码:
form_tag(controller: default[:controller], action: default[:action]) do
# Some code
end
我想要的东西(这只是草稿,原型,解包功能只是示例):
form_tag(default.unpack) do
# Some code
end
注意:当我说unpack我的意思是来自javascript
var fn = function(a, b, c){
// Some code
}
fn.apply(null, [a, b, c]);
任何帮助将不胜感激!
答案 0 :(得分:4)
刚刚摆脱哈希的.extract!
调用:
def search_form(opts={})
# Default options to form_tag
default = { method: "post", controller: "search" }
default.merge!(opts)
render :layout => "welcome/search" do
form_tag(default) do
"Privet"
end
end
end
来自Hash#extract!
的文档:
删除并返回与给定键匹配的键/值对。
{ a: 1, b: 2, c: 3, d: 4 }.extract!(:a, :b) # => {:a=>1, :b=>2} { a: 1, b: 2 }.extract!(:a, :x) # => {:a=>1}
这意味着any_hash.extract!
(没有参数)将返回{}
,这可能不是您想要的。
答案 1 :(得分:2)
以下内容应该有效:
def search_form(opts = { })
options = { method: :post, controller: :search, action: :search }.merge(opts)
render layout: 'welcome/search' do
form_tag(options) do
"Privet"
end
end
end