2016-01-16 15 views
6

Tôi đang cố gắng cho phép người dùng thay đổi địa chỉ email của họ mà sử dụng làm tên người dùng duy nhất của họ. Mặc dù bản cập nhật không có lỗi, nhưng không có thay đổi nào được thực hiện đối với địa chỉ email cho người dùng trong cơ sở dữ liệu.Email thay đổi phát sinh không cập nhật email

Sau đây là các phần có liên quan của mã:

Mẫu:

<%= 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> 

điều khiển:

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 ... 

các user_params phương pháp:

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, :user_id, :school, :degree_title, :start_date, :end_date, :info, :_destroy], 
    user_account_attributes: [:id, :user_id, :email, :password, :password_confirmation, :_destroy], 
    user_category_ids:[]) 
end 
mô hình tài khoản

sử dụng:

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 

Trả lời

0

Tôi không chắc chắn, nhưng tôi nghĩ rằng, trong mô hình sử dụng của bạn nên có

accepts_nested_attributes_for :user_account 
+0

yep, đã có: ( – chris

5

Ok, vì vậy nó quay ra rằng địa chỉ email mới đã được lưu như: unconfirmed_email, nhưng điều này không thay đổi bất kỳ chức năng nào của tài khoản được liên kết, vì tài khoản vẫn có email cũ được lưu trữ dưới dạng: email.

Vì vậy, tôi đã phải làm

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

để các email người dùng xác nhận để được bực bội và do đó biểu mẫu đăng nhập sẽ không còn chấp nhận mật khẩu cũ.

+0

Tôi đã sử dụng lệnh gọi đến 'confirm()'. –

Các vấn đề liên quan