2012-03-19 182 views
18

我正在使用新的設計確認的Rails 3。如何跳過需要確認電子郵件地址更新與設計?

我想讓用戶通常確認他們的電子郵件地址。當創建一個新用戶,我可以跳過確認電子郵件:

user.skip_confirmation! 

不過,有時我需要手動更改代表用戶的電子郵件。這在更改電子郵件時不起作用。例如:

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

這仍然需要用戶確認電子郵件。電子郵件沒有被更新。設計師正在發送一封電子郵件。

任何想法?謝謝

回答

57

對於更新你可以update_attributes棒,或只是一個普通的saveskip_reconfirmation!(注意在重新確認「再」)。

@user.skip_reconfirmation! 

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

謝謝!正是我在找的東西。 – 2013-01-09 23:04:48

+0

感謝您的提示! – 2014-11-08 18:25:18

+0

非常感謝:)它爲我工作:) – 2017-05-30 16:28:15

11

嘗試將設置Devise.reconfirmableUser.reconfirmable(或任何您的模型)設置爲false。你可以在這條線把它放在config/initializers/devise.rb

# 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 

您也可以使用Active Record的update_column方法,從而節省了場,而無需運行回調或驗證。

+0

我想reconfirmable,我想要做的是對現有的用戶記錄更新的電子郵件時跳過reconfirmable的能力 – AnApprentice 2012-03-20 00:49:53

+0

我已經更新了使用'update_column'方法的答案。 – 2012-03-20 01:01:59

1

如果你想跳過剛剛電子郵件通知,這樣做:

@user.skip_confirmation_notification! 
@user.save 
5

您可以在模型# models/users.rb使用這種代碼。這將禁用更新電子郵件再次確認:

def postpone_email_change? 
    false 
end 

或在您的控制器

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

    if user.save 
    user.confirm 
    end 
end 
+0

真的有效! – ilgam 2017-06-21 08:59:16

相關問題