用于呈现局部的哈希符号的函数参数
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"}
我有很多渲染助手功能,比如
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"}