从类的根处的Ruby方法调用中删除一个参数。在即时

时间:2011-10-04 05:54:51

标签: ruby-on-rails ruby devise

这是一个Ruby类:

class User
  devise :trackable, :confirmable
end

对于大多数情况,我希望:confirmable存在,但在某些情况下,我想在实例化之前删除:confirmable

问题:如何即时删除:confirmable

我宁愿避免创建一个单独的类。

2 个答案:

答案 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!