[英]validate inclusion not working on create
好吧,我有一個很奇怪的場景,我不知道該如何處理,因此在我嘗試向您解釋時請耐心等待。
我有以下模型。
class User < ActiveRecord::Base
Roles = { pending: 'pending_user', role2: 'role2', etc: 'etc' }
attr_accessible :role
validates :role, inclusion: {in: Roles.values}
before_create :add_pendng_role #Set user role to Roles[:pending]
end
現在的問題是,第一次創建記錄時,此驗證失敗! 例如,在我的控制器中,我有以下代碼:
class UsersController < ActionController::Base
@user = User.new params[:user]
if @user.save # --------------- ALWAYS FAILS -------------------------------
#do something
else
#do something else
end
end
現在,我認為它失敗的原因是因為僅在驗證通過后才添加一個角色before_create
。 現在我知道,我不能代替 before_create :add_role
與 before_validation :add_role
,因為我認為這將每一個驗證完成時添加的角色。 我之所以不能這樣做,是因為用戶角色將在應用程序中更改,並且我不想每次對用戶進行驗證時都重置角色。
關於如何解決這個問題的任何線索?
使用* before_validation *,如rails回調指南中所述
class User < ActiveRecord::Base
Roles = { pending: 'pending_user', role2: 'role2', etc: 'etc' }
attr_accessible :role
validates :role, inclusion: {in: Roles.values}
before_validation :add_pendng_role, on: :create #Set user role to Roles[:pending]
end
您可以嘗試:
before_validation :add_role, on: :create
看起來你可以改變before_create
到before_validation
如果你使用:on
參數:
before_validation :add_pendng_role, :on => :create
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.