我有一個用戶模型一個簡單的應用程序,這是它的表:定義強參數時,'require'會做什麼?
create_table "users", force: :cascade do |t|
t.string "email"
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
.
.
.
end
在users_controller
,我們通常定義的私有方法user_params
通過允許使用的參數,例如:
params.require(:user).permit(:email, :password, :password_confirmation, :name)
我問題是關於require
。在rubyonrails' api doc中,它表示:
「傳遞單個鍵時,如果它存在且其關聯值存在或單個值爲false ......給定一個鍵數組時,該方法會嘗試要求每個鍵如果成功,則返回具有相應返回值的數組......否則,該方法會重新找到發現的第一個異常...「
但在前面的示例中,app/views/users/new.html.erb
頁面,如果我將:name
列留空,我仍然可以成功提交。我試圖改變這樣的線:
params[:user].permit(:email, :password, :password_confirmation, :name)
它仍然有效。雖然通過參數鍵:user
時有點不同。
Rails可以通過在model.rb中使用驗證來檢查列的存在。 require
在這裏做類似的事情嗎?
這兩種用法有什麼區別?任何人都可以解釋一下,或者舉個簡單的例子嗎?
謝謝!
':name'是在'permit'中傳遞的密鑰之一,而不是'require'。嘗試傳遞沒有':user'的'params',你會看到異常 – Pavan