如何跳过使用设计确认电子邮件地址更新的需要?

时间:2012-03-19 21:47:38

标签: ruby-on-rails ruby-on-rails-3 devise

我正在使用Rails 3和新设计确认。

我希望用户通常会确认他们的电子邮件地址。创建新用户时,我可以跳过确认电子邮件:

user.skip_confirmation!

但是,有时我需要代表用户手动更改电子邮件。这在改变电子邮件时似乎不起作用。例如:

@user = User.find_by_email('bob@site.com')
@user.email = 'dead@site.com'
@user.skip_confirmation!
@user.save!

这仍然需要用户确认电子邮件。电子邮件没有更新。设计师正在发送电子邮件。

有什么想法吗?感谢

4 个答案:

答案 0 :(得分:63)

对于更新,您可以坚持使用update_attributes,或只使用普通saveskip_reconfirmation!(请注意重新确认中的“重新”。

@user.skip_reconfirmation!

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

答案 1 :(得分:12)

尝试将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方法,该方法可以在不运行回调或验证的情况下保存字段。

答案 2 :(得分: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

答案 3 :(得分:1)

如果您只想跳过电子邮件通知,请执行以下操作:

@user.skip_confirmation_notification!
@user.save