簡體   English   中英

在Rails 4中允許具有Devise的用戶的嵌套屬性

[英]Allowing a nested attribute for a User with Devise in Rails 4

我正在從Rails 3.2升級到4.0,並且正在為我的User模型使用Devise。 以前,我的User模型中具有attr_accessible屬性:

attr_accessible :username, :first_name, :last_name, :email, :password, :password_confirmation, :remember_me

現在,根據有關強參數Devise文檔 ,我必須在我的application_controller.rb中的before_filter方法中執行以下操作:

devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :first_name, :last_name, :email, :password, :password_confirmation, :remember_me) }
devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:username, :first_name, :last_name, :email, :password, :password_confirmation, :remember_me, :current_password) }

看起來不錯,但是我的User模型中也有一個accepts_nested_attributes_for

accepts_nested_attributes_for :staff, reject_if: :new_record?

如何在我的devise_parameter_sanitizer.for(:account_update)呢? 我不清楚。

更新 :我嘗試了以下操作:

devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:username, :first_name, :last_name, :email, :password, :password_confirmation, :remember_me, :current_password, staff_attributes: [:notification_email]) }

具體地講,我添加staff_attributes: [:notification_email]作為參數傳遞給該permit方法。 當我僅保存用戶編輯表單而不進行任何更改時,發生了3個主要問題:

  1. 顯示錯誤:“工作人員通知電子郵件已被接收”(我已validates :notification_email, uniqueness: true, allow_nil: trueStaff模型中)
  2. 顯示錯誤:“員工項目不能為空”(我在Staff模型中具有validates_presence_of :project_id
  3. 即使我收到了這兩個錯誤,也刪除了與user關聯的staff模型,但所有屬性均設置為nilnotification_email除外。 其中包括user_id字段,因此staff對象不再連接到user

這些是嵌套屬性,因此您需要通過以下方式添加它們:

devise_parameter_sanitizer.for(:sign_up) { |u|
  u.permit(:username, :staff_attributes => [:name, :position, :etc]) 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM