繁体   English   中英

Ruby发送到方法哈希

[英]Ruby send to method hash

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

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

注意:当我说打开包装时,我的意思是说像javascript

var fn = function(a, b, c){
  // Some code
}
fn.apply(null, [a, b, c]);

任何帮助将不胜感激!

只需摆脱.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!的文档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! (不带参数)将返回{} ,这可能不是您想要的。

以下应该工作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM