简单的问题,我有点惊讶的是,Rails已经没有更好的处理了。
我正在尝试使用params
方法从许多Rails API控制器中清除except!()
中的一些多余属性,如下所示:
params.except!( :format, :api_key, :controller, :action, :updated_at, :created_at )
由于这些属性在许多API端点上都是相同的,因此我希望将它们存储在API的Constant
BaseController
中,如下所示:
PARAMS_TO_SCRUB = [ :format, :api_key, :controller, :action, :updated_at, :created_at ]
params.except!( PARAMS_TO_SCRUB ) # => Doesn't work.
但是except!()
方法只接受一个键的splat,所以没有任何属性被过滤:
# File activesupport/lib/active_support/core_ext/hash/except.rb, line 11
def except!(*keys)
keys.each { |key| delete(key) }
self
end
我现在正在设置的工作是在BaseController
中创建一个方法,用键盘擦除params
,如下所示:
def scrub_params
params.except!( :format, :api_key, :controller, :action, :updated_at, :created_at )
end
是否无法存储此类符号列表?
答案 0 :(得分:10)
在数组变量之前添加*
:
PARAMS_TO_SCRUB = [ :format, :api_key, :controller, :action, :updated_at, :created_at ]
params.except!( *PARAMS_TO_SCRUB )
因此,该方法将更改为:
def scrub_params ex_arr
params.except!( *ex_arr )
end
或某些全局或类变量。