这是一个Ruby类:
class User
devise :trackable, :confirmable
end
对于大多数情况,我希望:confirmable
存在,但在某些情况下,我想在实例化之前删除:confirmable
。
问题:如何即时删除:confirmable
?
我宁愿避免创建一个单独的类。
答案 0 :(得分:4)
devise :confirmable
为您的模型添加了多种方法,其中一种方法是skip_confirmation!
:
如果您不希望在创建时发送确认,则不需要代码 生成,调用skip_confirmation!
示例:
user = User.new
user.skip_confirmation!
答案 1 :(得分:1)
您需要同时进行迁移:trackable和:在任何情况下都可以为您的数据库确认。
仅仅具有以下两种情况的确认可能不容易:但是在您不需要的情况下,您可以在创建用户后从控制器内自动确认用户帐户吗?
见:
https://github.com/plataformatec/devise/blob/master/lib/devise/models/confirmable.rb
第27..30行包含before_create和after_create挂钩
你需要做这个修改:
你需要覆盖:confirmation_required? ,以便它返回true 仅在您希望生成确认令牌并发送确认电子邮件的情况下。 如果您不需要确认电子邮件,则可以执行user.confirm!创建用户帐户后。 您可以将其作为额外的after_create操作。
e.g。
module Devise
module Models
module Confirmable
after_create :confirm! , :if => :confirmation_not_required? # you'll need to define that method
private
def confirmation_required? # overriding the default behavior
your_special_conditions && !confirmed?
end
def confirmation_not_required?
! confirmation_required?
end
end
end
end
注意: 而不是user.confirm!你也可以使用user.skip_confirmation!