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

Jos*_*ter 3 ruby symbols ruby-on-rails constants ruby-on-rails-3

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

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

params.except!( :format, :api_key, :controller, :action, :updated_at, :created_at )
Run Code Online (Sandbox Code Playgroud)

因为这些属性在许多API端点上是相同的,所以我想将它们存储Constant在API中BaseController,如下所示:

在BaseController.rb中

PARAMS_TO_SCRUB = [ :format, :api_key, :controller, :action, :updated_at, :created_at ]

params.except!( PARAMS_TO_SCRUB ) # => Doesn't work.
Run Code Online (Sandbox Code Playgroud)

但该except!()方法只接受一个键的splat,因此没有任何属性被过滤:

# File activesupport/lib/active_support/core_ext/hash/except.rb, line 11
def except!(*keys)
  keys.each { |key| delete(key) }
  self
end
Run Code Online (Sandbox Code Playgroud)

我现在设置的工作是创建一个方法,用相应的BaseController方式擦除params键,如下所示:

def scrub_params
  params.except!( :format, :api_key, :controller, :action, :updated_at, :created_at )
end
Run Code Online (Sandbox Code Playgroud)

有没有办法存储像这样的符号列表?

zis*_*she 10

*在数组变量之前添加:

 PARAMS_TO_SCRUB = [ :format, :api_key, :controller, :action, :updated_at, :created_at ]

 params.except!( *PARAMS_TO_SCRUB )
Run Code Online (Sandbox Code Playgroud)

因此,该方法将更改为:

 def scrub_params ex_arr
   params.except! *ex_arr
 end
Run Code Online (Sandbox Code Playgroud)

或者一些全局或类变量.

  • 好一个!不知道这件事。可以在此 SO 答案中找到更多信息:http://stackoverflow.com/a/918475/293280 (2认同)