さて、私は対処方法がわからない非常に奇妙なシナリオを持っているので、私があなたにそれを説明しようとしているので、私に耐えてください。
私は次のモデルを持っています。
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
私がこれにどのように取り組むことができるかについての手がかりはありますか?