2012-03-19 183 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

相关问题