好吧,我有一个很奇怪的场景,我不知道如何处理,所以请在我尝试向你解释时请耐心等待。
我有以下型号。
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
角色。现在我知道无法替换 {/ 1}} 与 before_create :add_role
因为我认为每次验证完成后它都会添加角色。我不能这样做的原因是因为用户角色将在应用程序中更改,并且我不想在每次对用户进行验证时重置角色。
关于如何解决这个问题的任何线索?
答案 0 :(得分:2)
使用* before_validation *,如rails callback guide
中所述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
答案 1 :(得分:2)
你可以尝试:
before_validation :add_role, on: :create
答案 2 :(得分:1)
如果您使用before_create
参数,您似乎可以将before_validation
更改为:on
:
before_validation :add_pendng_role, :on => :create