使用强参数时如何在Rails中需要一个Array?

时间:2014-01-10 06:26:33

标签: ruby-on-rails ruby-on-rails-4 strong-parameters

在Rails 4中使用强参数时,有没有办法require数组?

> params = ActionController::Parameters.new(contacts: [])
 => {"contacts"=>[]} 
> params.require(:contacts)
ActionController::ParameterMissing: param not found: contacts

3 个答案:

答案 0 :(得分:1)

正如史蒂夫·威廉(Steve Wilhelm)所说,如果数组非空,它就可以工作。它只会在您的示例中失败,因为contacts数组为空。但这通常是理想的行为。

如果你不关心数组中的内容,只需使用permit。

那就是说,我想最常见的情况是你想要一个带有已知键的哈希数组。我会这样做:

# Returns an array of contacts after checking the params shape
# Use instead of params[:contacts]
def contacts_params
  params.permit(contacts: %i(id name phone address))
  params.require(:contacts)
end

答案 1 :(得分:0)

看来你可以拥有Scalars数组,这可行

> params = ActionController::Parameters.new(contacts: [nil])
=> {"contacts"=>[nil]}
> params.require(:contacts)
=> [nil]
> params = ActionController::Parameters.new(contacts: [1])
=> {"contacts"=>[1]}
> params.require(:contacts)
=> [1]

以下是documentation

的说明

允许的标量类型是String,Symbol,NilClass,Numeric,TrueClass,FalseClass,Date,Time,DateTime,StringIO,IO,ActionDispatch :: Http :: UploadedFile和Rack :: Test :: UploadedFile。

要声明params中的值必须是允许的标量值数组,请将键映射到空数组:

params.permit(id: [])

答案 2 :(得分:0)

你试过了吗

params.permit(contacts: []).require(:contacts)