2013-05-14 6 views
5

Po pierwsze, przepraszam za mój słaby angielski, jestem francuski ... Trudno mi wyjaśnić mój problem!Wyobraź sobie, że nie można zatwierdzić modelu

Mam Modelarski użytkownika w aplikacji Rails:

class User < ActiveRecord::Base 

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

end 

i model BackUser które dziedziczą z Użytkownikiem:

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 

Ta druga klasa powinna potwierdzić zapis przed zapraszam! ale kiedy używam konsoli wykonać następujące czynności:

u = BackUser.new 
u.invite! 

„u” jest zapisany w bazie danych i jest wysłać zaproszenie do pustej wiadomości ...

Czy wiesz, co mam zrobić?

To dużo!

+0

Z jakiej wersji korzystałeś? Mamy ten sam problem po aktualizacji do wersji devise_invitable 1.2.1 z wersji 1.1.8. Więc może jest to niekompatybilna wstecz zmiana? – psmith

Odpowiedz

12

Jestem pewien, że znalazłeś rozwiązanie lub obejście problemu, ale dla wszystkich przyszłych użytkowników SO, którzy napotykają ten sam problem, znalazłem całkiem prostą naprawę.

Devise Invitable's model configuration docs nie w pełni wyjaśnić jak zaimplementować :validate_on_invite, ale trzeba ustawić opcję konfiguracji do true - :validate_on_invite => true.

Oto, jak wygląda moja metoda opracowywania w moim modelu użytkownika, aby działała poprawnie.

modele/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 

Teraz gdy próbuję przesłać zaproszenie jest w pełni stwierdzenia prawidłowości rekord z tym, co walidacji Mam utworzonych w moim modelu użytkownika przed zezwoleniem na zaproszenie zostać wysłane i utworzyć rekord użytkownika. Patrząc na dokumenty, domyślam się, że możesz włączyć to ustawienie w inicjalizatorze devise, ale nie próbowałem iść tą drogą.

* Druga możliwa opcja, aby umożliwić weryfikację, czy potrzebne

config/inicjalizatory/devise.rb

config.validate_on_invite = true 
+0

Próba obu tych opcji, nie działa jeszcze w Rails 4/Invitable 1.5.5 – emptywalls

-1

To nie rozwiązuje tajemnicę, dlaczego zachowanie występuje, ale:

if u.save 
    u.invite! 
end 

da się do końca doprowadzić jesteś po.

+1

To nie zadziała, ponieważ wystąpi błąd w haśle. – emptywalls

4

Nigdy nie byłem w stanie uzyskać walidację pracować poprawnie devise niezapowiedziany. Nie możesz użyć sugestii RobHeaton, ponieważ otrzymasz błąd sprawdzania poprawności hasła. Używam tego małego hacka, aby walidacja zadziałała:

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

Ta sama łódź. Zachęcające sprawdzenia również mnie nie sprawdzają. – emptywalls

+0

Ponownie uruchomiono ten problem z aplikacją Rails 5 i użyłem tego rozwiązania, ponieważ mój poprzedni nie działa z Railsami 4+. – mkp

Powiązane problemy