我有很多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
注意本地字段中包含来自函数参数的重复键和值。围绕这个的最佳做法是什么?有没有办法从方法中获取参数并将它们作为哈希的键?
答案 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"}