用于呈现局部的哈希符号的函数参数

Function Parameters to Hash Symbols for Rendering Partials

我有很多渲染助手功能,比如

  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

请注意,本地字段中充满了来自函数参数的重复键和值。围绕此的最佳做法是什么?有没有办法从方法中获取参数并将它们作为散列的键?

采用哈希参数

您可以使用几种不同的语法将命名参数作为散列引入。一种是使用 "double 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"}