2014-01-10 29 views

回答

0

看樣子你可以有標量的陣列,這工作

> 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

允許的標量類型包括字符串,符號,NilClass,數字,TrueClass描述, FalseClass,Date,Time,DateTime,StringIO,IO,ActionDispatch :: Http :: UploadedFile和Rack :: Test :: UploadedFile。

要聲明在PARAMS值必須是允許的標量值的陣列的鍵映射到一個空數組:

params.permit(id: []) 
0

正如史蒂夫威廉指出的,它的工作原理如果數組是非空的。它僅在您的示例中失敗,因爲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 
相關問題