2012-03-19 12 views
18

Sto usando Rails 3 con il nuovo dispositivo di conferma.Come saltare la necessità di confermare un aggiornamento dell'indirizzo email con escogitare?

Desidero che gli utenti in genere confermino il proprio indirizzo email. Quando si crea un nuovo utente che posso saltare la mail di conferma con:

user.skip_confirmation! 

Tuttavia, a volte ho bisogno di modificare manualmente una e-mail per conto di un utente. E questo non sembra funzionare quando si cambiano le email. esempio:

@user = User.find_by_email('[email protected]') 
@user.email = '[email protected]' 
@user.skip_confirmation! 
@user.save! 

Ciò richiede comunque che l'utente confermi l'e-mail. L'e-mail non viene aggiornata. E ideare sta inviando una email.

Qualche idea? Grazie

risposta

57

Per gli aggiornamenti si può attaccare con update_attributes, o semplicemente una pianura save e skip_reconfirmation! (notare il 're ' in riconferma).

@user.skip_reconfirmation! 

respond_to do |format| 
    if @user.update_attributes(params[:user]) 
    ... 
end 
+0

Grazie! Proprio quello che stavo cercando. –

+0

Grazie per il suggerimento! –

+0

Grazie mille :) Ha funzionato per me :) –

11

Provare a impostare Devise.reconfirmable o User.reconfirmable (o qualunque sia il modello) su falso. È possibile impostare su config/initializers/devise.rb su questa linea:

# If true, requires any email changes to be confirmed (exctly the same way as 
# initial account confirmation) to be applied. Requires additional unconfirmed_email 
# db field (see migrations). Until confirmed new email is stored in 
# unconfirmed email column, and copied to email column on successful confirmation. 
config.reconfirmable = true 

È inoltre possibile utilizzare il metodo Active Record update_column, che consente di risparmiare un campo senza correre callback o convalide.

+0

voglio reconfirmable, quello che voglio fare è avere la capacità di saltare reconfirmable durante l'aggiornamento di una e-mail per un record utente esistente – AnApprentice

+0

Ho aggiornato la risposta per utilizzare il metodo 'update_column'. –

1

Se si desidera saltare solo la notifica e-mail, fare questo:

@user.skip_confirmation_notification! 
@user.save 
5

È possibile utilizzare questo tipo di codice nel modello # models/users.rb. Questo disabiliterà email riconferma aggiornata:

def postpone_email_change? 
    false 
end 

o nel controller

def update 
    user.email = params[:user][:email] 
    user.skip_confirmation_notification! 

    if user.save 
    user.confirm 
    end 
end 
+0

che funziona davvero! – ilgam

Problemi correlati