我正在使用Rails 3和新设计确认。
我希望用户通常会确认他们的电子邮件地址。创建新用户时,我可以跳过确认电子邮件:
user.skip_confirmation!
但是,有时我需要代表用户手动更改电子邮件。这在改变电子邮件时似乎不起作用。例如:
@user = User.find_by_email('bob@site.com')
@user.email = 'dead@site.com'
@user.skip_confirmation!
@user.save!
这仍然需要用户确认电子邮件。电子邮件没有更新。设计师正在发送电子邮件。
有什么想法吗?感谢
答案 0 :(得分:63)
对于更新,您可以坚持使用update_attributes
,或只使用普通save
和skip_reconfirmation!
(请注意重新确认中的“重新”。
@user.skip_reconfirmation!
respond_to do |format|
if @user.update_attributes(params[:user])
...
end
答案 1 :(得分:12)
尝试将Devise.reconfirmable
或User.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