将一个符号数组传递给Rails的`except()!`方法

时间:2014-05-01 22:51:55

标签: ruby-on-rails ruby ruby-on-rails-3 constants symbols

简单的问题,我有点惊讶的是,Rails已经没有更好的处理了。

我正在尝试使用params方法从许多Rails API控制器中清除except!()中的一些多余属性,如下所示:

params.except!( :format, :api_key, :controller, :action, :updated_at, :created_at )

由于这些属性在许多API端点上都是相同的,因此我希望将它们存储在API的Constant BaseController中,如下所示:

在BaseController.rb

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

是否无法存储此类符号列表?

1 个答案:

答案 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

或某些全局或类变量。