用于渲染部分的哈希符号的函数参数

时间:2016-07-28 03:11:02

标签: ruby ruby-on-rails-4 render helper partials

我有很多Render Helper函数,比如

  def generic_form_datetime_field(f,attribute_name, my_label ,selected_model_instance)
    render(:partial => 'common_partials/generic_form/datetime_field',
           :locals => {:f => f,
                       :attribute_name => attribute_name,
                       :my_label => my_label,
                       :selected_model_instance => selected_model_instance
           })
  end

注意本地字段中包含来自函数参数的重复键和值。围绕这个的最佳做法是什么?有没有办法从方法中获取参数并将它们作为哈希的键?

1 个答案:

答案 0 :(得分:0)

获取哈希参数

您可以使用一些不同的语法将命名参数作为哈希引入。一个是使用"双splat":

def func(**args)
  puts args
end

func(a: 'aval', b: 3)  # prints {:a=>"aval", :b=>3}

您将看到的另一种语法是:

def func(opts={})
  puts opts
end

func(a: 'aval', b: 3)  # prints: {:a=>"aval", :b=>3}

可在此blog post找到更多信息。

过滤哈希

如果你想要防御,你可以使用一般过滤集合的函数:select。以下是如何仅从指定的白名单中获取哈希键的值的示例:

h = {a: 'a', b: 'b', c: 'c'}
whitelist = [:a, :c]
h.select { |k, _| whitelist.include?(k) }  
# result: {:a=>"a", :c=>"c"}