在Rails 4中使用強參數時,有沒有一種方法可以用require
?如何在使用強參數時在Rails中需要數組?
> params = ActionController::Parameters.new(contacts: [])
=> {"contacts"=>[]}
> params.require(:contacts)
ActionController::ParameterMissing: param not found: contacts
在Rails 4中使用強參數時,有沒有一種方法可以用require
?如何在使用強參數時在Rails中需要數組?
> params = ActionController::Parameters.new(contacts: [])
=> {"contacts"=>[]}
> params.require(:contacts)
ActionController::ParameterMissing: param not found: contacts
看樣子你可以有標量的陣列,這工作
> params = ActionController::Parameters.new(contacts: [nil])
=> {"contacts"=>[nil]}
> params.require(:contacts)
=> [nil]
> params = ActionController::Parameters.new(contacts: [1])
=> {"contacts"=>[1]}
> params.require(:contacts)
=> [1]
允許的標量類型包括字符串,符號,NilClass,數字,TrueClass描述, FalseClass,Date,Time,DateTime,StringIO,IO,ActionDispatch :: Http :: UploadedFile和Rack :: Test :: UploadedFile。
要聲明在PARAMS值必須是允許的標量值的陣列的鍵映射到一個空數組:
params.permit(id: [])
正如史蒂夫威廉指出的,它的工作原理如果數組是非空的。它僅在您的示例中失敗,因爲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