Ruby on rails Ruby发送到方法散列

Ruby on rails Ruby发送到方法散列,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有下一个代码(它们不工作): 所以我在助手中有默认选项,这段代码将接收选项作为参数。 我如何(解包)我的散列并且不编写难看的代码: form_tag(controller: default[:controller], action: default[:action]) do # Some code end 我想要这样的东西(这只是草稿、原型、解包函数的示例): form_tag(default.unpack) do # Some code end 注意:当我说unpack时,我指的

我有下一个代码(它们不工作):

所以我在助手中有默认选项,这段代码将接收选项作为参数。 我如何(解包)我的散列并且不编写难看的代码:

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]);

任何帮助都将不胜感激

以下方法应该有效:

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

只要去掉
.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
从以下文件:

移除并返回与给定键匹配的键/值对

{ 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
(没有参数)将返回
{}
,这可能不是您想要的。

您只需按原样传递哈希,无需任何解包。@Iceman不工作。
{ a: 1, b: 2, c: 3, d: 4 }.extract!(:a, :b) # => {:a=>1, :b=>2}
{ a: 1, b: 2 }.extract!(:a, :x)             # => {:a=>1}