2012-12-11 13 views
11

Używam devise gem i podczas tworzenia użytkownika chcę pominąć konfimację! i pominąć zliczanych kolonii e-mail na przykład:Wymyślić potwierdzenie pominięcia klejnotu i przesłać potwierdzenie pocztą elektroniczną zarówno na raz

User.create(:first_name => "vidur", :last_name => "punj").confirm!.skip_confirmation! 

Ale to tylko potwierdzenie pomija i nie pominąć wysyłanie wiadomości e-mail z potwierdzeniem. Czy ktoś może dać mi pomysł, aby pominąć oba.

+0

http: // www.rubydoc.info/github/plataformatec/devise/Devise/Models/Confirmable# – Abhinay

Odpowiedz

23

Musisz zadzwonić na skip_confirmation! zanim zapiszesz rekord.

Spróbuj

user = User.new(:first_name => "blah") 
user.skip_confirmation! 
user.save 
+0

Pominie to wysyłanie wiadomości e-mail z potwierdzeniem, ale nie można potwierdzić, że użytkownik loguje się za pomocą formularza logowania. –

+2

Zgodnie z opracowanym kodem .. skip_confirmation ustawia atrybut confirmed_at ... To samo potwierdza! robi. Zobacz: https://github.com/plataformatec/devise/blob/master/lib/devise/models/confirmable.rb#L116 – Jamsi

+0

tak masz rację. –

4

Telefonujesz User.create przed skip_confirmation !, trzeba zadzwonić User.new i user.save później.

Spróbuj

user = User.new(:first_name => "vidur", :last_name => "punj") 
    user.skip_confirmation! 
    user.save! 
+0

Świetny połów! Dziękuję za podzielenie się. –

2

Jeśli nie potrzebują potwierdzenia w ogóle, można usunąć :confirmable symbol modelu.

+2

Nie mogę tego zrobić, ponieważ potrzebuję procedury potwierdzenia dla reszty strony. Ale chcesz go pominąć tylko w specjalnym przypadku tworzenia użytkowników. –

3
Got the solution: 
@user=User.new(:first_name => "vidur", :last_name => "punj") 
@user.skip_confirmation! 
@user.confirm! 
@user.save 
4

ustawić pole confirmed_at

User.create!(confirmed_at: Time.now, email: '[email protected]', ...) 

przydatnych w seeds.rb

User.create_with(name: "Mr T", company: "Comp X", password: 'rubyrubyruby', password_confirmation: 'rubyrubyruby', confirmed_at: Time.now).find_or_create_by!(email: '[email protected]') 
+0

To jest to, czego potrzebowałem - dzięki! – Bijan

3

Jeśli są zdezorientowani gdzie napisać skip_confirmation! metody w kontrolerze jak nie masz jeszcze generowane opracować kontrolery następnie :

Napisz to w swoim User modelu

before_create :my_method 

def my_method 
self.skip_confirmation! 
end 

Teraz wystarczy użyć:

user = User.new(:first_name => "Gagan") 
user.save 
+1

To naprawdę działa! ale to uruchamia się za każdym razem, gdy wywoływany jest zapis, który zawiera "wstaw" i "aktualizuj" do bazy danych. Jak mogę zastosować go tylko do "wstawiania", a nie "aktualizacji"? – Yang

+2

@ Yang Możesz użyć wywołania zwrotnego "before_create: my_method" zamiast before_save. – bkunzi01

1

after_create: :skip_confirmation_notification - sprawdź here

Jeśli chcesz skip_confirmation_notification na pewnym warunkiem tylko, użyj PROC

Powiązane problemy