设计可邀请的不验证模型

问题描述:

首先,请原谅我可怜的英语,我是法语......解释我的问题很棘手!设计可邀请的不验证模型

我有一个模型,用户模型在Rails应用程序:

class User < ActiveRecord::Base 

    attr_accessible :email, :gender, :lastname, :firstname  

end 

以及从用户继承BackUser模型:

class BackUser < User 
    # Class for Backoffice User 
    devise :database_authenticatable, 
      :rememberable, 
      :trackable, 
      :lockable, 
      :invitable, 
      :confirmable, 
      :validatable, 
      :validate_on_invite => true 

    attr_accessible :password, :password_confirmation, :remember_me, :active, :role 

    validates :role, presence: true, 
        inclusion: ["admin", "normal"] 

    validates :gender, presence: true 

    validates :firstname, presence: true 

    validates :lastname, presence: true 


    def admin? 
    self.role == 'admin' 
    end 

end 

这第二类应该验证记录之前邀请! 但是,当我使用控制台执行以下操作:

u = BackUser.new 
u.invite! 

“U”被保存在数据库中,并邀请被发送到一个空白邮件...

你知道我有做?

Thans很多!

+0

你使用的是什么版本?我们在从1.1.8升级到devise_invitable 1.2.1后出现同样的问题。所以也许这是一个落后的不兼容的变化? – psmith 2013-09-04 06:23:40

我相信你现在已经找到了解决方案或解决方法到你的问题,但对于任何未来的SO用户遇到同样的问题,我发现一个非常简单的修复。

Devise Invitable's model configuration docs不能完全解释如何实现:validate_on_invite,但你必须设置配置选项true - :validate_on_invite => true

下面是我的设计方法在我的用户模型中看起来像这样工作正常。

型号/ user.rb

# Include default devise modules. Others available are: 
# :confirmable, :lockable, :timeoutable and :omniauthable 
devise :invitable, :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable, :validate_on_invite => true 

现在,当我试图让邀请前提交的邀请它完全确认与我在我的用户模型建立的验证什么纪录被发送并且用户记录被创建。看看这些文档,我猜你也可以在设计初始化器中启用这个设置,但我没有试过去那个路线。如果需要的话

* 第二个可能的选项来启用验证

配置/初始化/ devise.rb

config.validate_on_invite = true 
+0

尝试这两个选项,尚未在Rails 4/Invitable上工作1.5.5 – emptywalls 2016-01-09 01:03:47

它没有解决,为什么你的行为发生之谜,但:

if u.save 
    u.invite! 
end 

会给最终导致你后。

+1

这将不起作用,因为您将在密码上遇到错误。 – emptywalls 2016-01-09 01:00:36

我从来没有能够得到验证,为色器件正常工作invitable。您无法使用RobHeaton的建议,因为您将在密码上收到验证错误。我使用这个小黑客来验证工作:

def create 
    @user = User.new(user_params) 
    @user.valid? 
    @user.errors.messages.except!(:password) #remove password from errors 
    if (@user.errors.any?) 
     render 'new' 
    else 
     @user.invite!(current_user) 
     redirect_to user_path(@user) 
    end 
    end 
+0

同一条船。可邀请的验证也不适用于我。 – emptywalls 2016-01-09 00:54:37

+0

使用Rails 5应用程序再次引发此问题,并使用此解决方案,因为我的上一个似乎无法与Rails 4+一起使用。 – mkp 2017-01-24 06:41:53