2
我從Rails 3.2升級到4.0,並使用Devise for User
模型。以前我曾在我的User
模式attr_accessible
屬性:根據Devise documentation for strong parameters允許在Rails 4中設計一個用戶的嵌套屬性4
attr_accessible :username, :first_name, :last_name, :email, :password, :password_confirmation, :remember_me
現在,我必須做好以下我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)
中指定?這點我不清楚。
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個主要問題,當我僅保存用戶編輯表單而不做任何改變:
- 錯誤顯示:「工作人員通知電子郵件已經採取」(我在
Staff
模型validates :notification_email, uniqueness: true, allow_nil: true
) - 錯誤顯示: 「工作人員的項目不能爲空」(我有
validates_presence_of :project_id
在Staff
模型) - 即使我收到的2個錯誤,與
user
相關的staff
模型被殲滅,所有的屬性都設置爲nil
除了notification_email
。這包括user_id
字段,因此staff
對象不再連接到user
。
哇,這是令人驚訝的。我在''permit'調用中添加了:',staff_attributes:[:notification_email]'。因爲我只希望用戶能夠更新他們的'notification_email',如果他們是職員。結果發生的是所有其他字段,包括'Staff'的'user_id'字段被設置爲'nil'!所以用戶不再是職員!有沒有辦法只能更新一個員工屬性?或者至少不把所有其他領域設置爲「無」?另外,當我編輯用戶時,我得到一個錯誤,即需要另一個'staff'字段,儘管它仍然沒有全部字段。 –
問題是我沒有':id'作爲'staff_attributes'指向的數組中的一個元素。現在一切正常完美! –
太棒了,我很高興它的作品! – arnvald