2013-05-14 16 views
5

Öncelikle, fakir ingilizcemi affedersiniz, fransızca ... sorunumu açıklamak zor!devise invisible modeli doğrulamıyor model

class User < ActiveRecord::Base 

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

end 

Ve Kullanıcıdan devralan bir BackUser modeli:

ben Rails uygulamasında bir modeli Kullanıcı modele sahip bu ikinci sınıf rekor daha önce davet doğrulamak gerekir

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 

! Aşağıdaki yapmak için konsolu kullandığınızda AMA: ...

u = BackUser.new 
u.invite! 

"u" veritabanına kaydedilir ve bir davet boş e-posta göndermek

ben gerekeni biliyor musunuz yap?

Thans çok!

+0

Hangi sürümü kullandınız? 1.1.8'den 1.2.1'e yükseltildikten sonra aynı soruna sahibiz. Yani belki bu geriye dönük uyumsuz bir değişiklik midir? – psmith

cevap

12

Şu anda sorununuza bir çözüm veya geçici çözüm bulduğunuzdan eminim, ancak aynı sorunla karşılaşan herhangi bir SO kullanıcısı için oldukça basit bir düzeltme buldum.

Devise Invitable's model configuration docs tamamen :validate_on_invite nasıl uygulanacağını açıklamak yok, ama sen true yapılandırma seçeneğini ayarlamak zorunda - :validate_on_invite => true.

Doğru şekilde çalışması için benim model metodumun nasıl göründüğüne bakalım.

modeller/Şimdi davetini izin vermeden önce tamamen benim kullanıcı modeli kurmak kadarıyla doğrulamaları ile rekor doğruluyor davetiye göndermek istediğinizde 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 

gönderilecek ve kullanıcı kaydı oluşturulmalıdır. Dokümanlara baktığımda, devise başlatıcısında bu ayarı etkinleştirebileceğinizi tahmin ediyorum, ama o rotayı izlemeyi denemedim. Gerekirse

* İkinci olası seçenek doğrulamasını etkinleştirmek için

config/ilklendiriciler/devise.rb ben vasiyetle için düzgün çalışması için doğrulama almanız mümkün olmamıştım

config.validate_on_invite = true 
+0

Rails 4/Invitable 1.5.5 – emptywalls

-1

Bu sizin davranış meydana neden gizemini çözmek değil,:

if u.save 
    u.invite! 
end 

peşindesiniz neden sonunu verecektir.

+1

Bu işe yaramaz, çünkü parolada bir hata alacaksınız. – emptywalls

4

invitable. RobHeaton'un önerisini kullanamazsınız, çünkü parolada bir doğrulama hatası alırsınız. Çalışmak için bu küçük kesmeyi kullanırım:

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

'da henüz çalışmıyor, bu seçeneklerin her ikisini de deneyin Aynı tekne. Davet edilebilir doğrulamalar benim için de işe yaramıyor. – emptywalls

+0

Bir Rails 5 uygulamasıyla bu konuya tekrar girdim ve önceki çözümüm Rails 4+ ile çalıştığı için bu çözümü kullandı. – mkp

İlgili konular