微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby-on-rails-4 – 设计更改电子邮件不会更新电子邮件

我正在尝试允许用户更改其设计用作其唯一用户名的电子邮件地址.即使更新没有出现错误,也不会对数据库用户的电子邮件地址进行任何更改.

以下是代码的相关部分:

形成:

<%= f.fields_for :user_account,@user.user_account do |user_account| %> 
<p>Edit email address for account: <%=  @user.user_account.email %></p> 
<div class="field">
  <%= user_account.label :new_email %><br />
  <%= user_account.text_field :email,autocomplete: "off",value: nil %>
</div>
<div class="field">
  <%= user_account.label :password %> <i>(please confirm the password associated with this account)</i><br />
  <%= user_account.password_field :current_password,autocomplete: "off" %>
</div>
<%= hidden_field_tag 'form','email' %>
<div class="actions">
  <%= user_account.submit "Edit" %>
</div>

控制器:

def update
respond_to do |format|
if params[:form] == 'email'
    if @user.user_account.valid_password?(params[:user][:user_account_attributes][:current_password])
      if @user.update(user_params)
        format.html { redirect_to user_path(@user),:notice => 'your new email has been saved' }
        format.json { render :show,status: :ok,location: @user }
      else
        format.html { render :edit }
        format.json { render json: @user.errors,status: :unprocessable_entity }
      end
    else 
      format.html { redirect_to edit_email_path(@user),:notice => 'incorrect password (email)' }
    end 
else ...

user_params方法

def user_params
params.require(:user).permit(
  :first_name,:middle_initial,:last_name,:linkedin,:website,:facebook,:video,:phone_number,:address_1,:address_2,:city,:zip_code,:image,:number,:years_practicing,:neighborhood,:biography,:price,:status,user_employments_attributes: [:id,:user_id,:company,:position,:start_date,:end_date,:info,:_destroy],user_educations_attributes: [:id,:school,:degree_title,user_account_attributes: [:id,:email,:password,:password_confirmation,user_category_ids:[])
end

用户帐户模型:

class UserAccount < ActiveRecord::Base
  # Include default devise modules. Others available are:
  #,:lockable,:timeoutable and :omniauthable
  devise :database_authenticatable,:registerable,:confirmable,:recoverable,:rememberable,:trackable,:validatable
   belongs_to :user
 end

解决方法

好的,所以事实证明新的电子邮件地址被保存为:unconfirmed_email,但这并未改变链接帐户的任何功能,因为该帐户仍然将旧电子邮件存储为:email.

因此我必须这样做

user.confirmed_at = nil
user.save(:validate => false)

为了重新发送用户确认电子邮件,以便登录表单不再接受旧密码.

原文地址:https://www.jb51.cc/ruby/265153.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐