2012-12-11 20 views
11

Sto usando devise gem e mentre creo l'utente voglio saltare la confimazione! e salta l'e-mail di conferma per esempio:Devise gem salta la conferma e salta la conferma via e-mail contemporaneamente.

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

Ma salta solo la conferma e non salta l'invio di e-mail di conferma. Qualcuno può darmi un'idea per saltare entrambi.

+0

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

risposta

23

È necessario chiamare skip_confirmation! prima di salvare il record.

Prova

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

Salta inviare solo e-mail di conferma ma non confermare l'accesso tramite il modulo di accesso. –

+2

Secondo il codice elaborato .. skip_confirmation imposta l'attributo confirm_at ... La stessa cosa conferma! lo fa. Vedi: https://github.com/plataformatec/devise/blob/master/lib/devise/models/confirmable.rb#L116 – Jamsi

+0

sì hai ragione .. –

4

Si sta chiamando prima di User.create skip_confirmation !, è necessario chiamare User.new e user.save tardi.

Prova

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

Grande cattura! Grazie per aver condiviso. –

2

Se non avete bisogno di conferme a tutti, è possibile rimuovere il simbolo :confirmable nel modello.

+2

Non posso farlo perché ho bisogno della procedura di conferma per il resto del sito web. Ma vuoi saltarlo solo per un caso speciale di creazione di utenti. –

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

impostare il campo confirmed_at

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

utile in 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

Questo è quello di cui avevo bisogno - grazie! – Bijan

3

Se siete confusi dove scrivere skip_confirmation! metodo controller come non avete generato concepire controllori ancora poi :

Scrivilo nel numero User modello

before_create :my_method 

def my_method 
self.skip_confirmation! 
end 

Ora usare semplicemente:

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

Funziona davvero! ma questo si attiva ogni volta che si chiama save, che include 'insert' e 'update' nel database. Come posso applicarlo solo a 'insert', non a 'update'? – Yang

+2

@Yang È possibile utilizzare la callback "before_create: my_method" anziché before_save. – bkunzi01

1

after_create: :skip_confirmation_notification - controllare here

Se si vuole skip_confirmation_notification su certa condizione unica, utilizzare un proc

Problemi correlati