在Rails 4中使用强参数时,有没有办法require
数组?
> params = ActionController::Parameters.new(contacts: [])
=> {"contacts"=>[]}
> params.require(:contacts)
ActionController::ParameterMissing: param not found: contacts
答案 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]
的说明
允许的标量类型是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)