好的,我有一个很奇怪的场景,我不知道如何处理,所以请耐心等待我尝试向您解释。
我有以下模型。
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
在验证通过后调用的角色。现在我知道我不能用 with 替换before_create :add_role
, 因为before_validation :add_role
我认为每次验证完成时它都会添加角色。我不能这样做的原因是用户角色将在应用程序中更改,并且我不想在每次对用户进行验证时重置角色。
关于我如何解决这个问题的任何线索?