2015-10-08 31 views
0

我有三種型號:EmployeeUserRole。這些類別之間的關係是:employee --- one_to_one - useruser - one_to_many - roleRails更新一到一對多 - 創建子對象(如果不存在)

我創建行動是工作的罰款與下列強PARAMS方法

def employee_params 
    params.require(:employee).permit(:first_name, :middle_name, :last_name, :email, user_attributes: [:id, role_ids:[]]) 
end 

對於更新,如果員工的記錄沒有用戶對象,我實例化新用戶,將其映射到員工,並通過將字符串PARAMS調用更新。但是,更新與消息失敗:

無法保存新的關聯用戶

我的更新方法的代碼是

def update 
    @employee = Employee.find(params[:id]) 
    if params[:employee][:user_attributes] != nil && params[:employee][:user_attributes][:role_ids] != nil && ! params[:employee][:user_attributes][:role_ids].empty? 
    if @employee.user == nil 
     @employee.user = User.new 
     temp_password = Devise.friendly_token.first(8) 
     @employee.user.is_temp_password = true 
     @employee.user.password = Devise.friendly_token.first(8) 
     @employee.user.email = @employee.email 
     @employee.user.email = params[:employee][:email] if params[:employee][:email] 
    end 
    end 
    respond_to do |format| 
    if @employee.update(employee_params) 
     format.json { render json: @employee.as_json} 
    else 
     format.json {render :json => @employee.errors.as_json, :status => 422} 
    end 
    end 
end 
+0

看起來好像你正在保存新的用戶記錄給我。 – DMH

+0

可能在實例化新用戶之後,還應該通過調用@ employee.user.save – Brozorec

+0

來保存它。我希望更新和保存發生在同一事務中。 – dnyanesh

回答

0

我覺得上面的網友建議,你需要以保存新的用戶對象,但我認爲你應該在Employee創建裏面創建用戶創建代碼,因爲你需要在更新中自動創建它

不知道你是否也知道幫手空白嗎?但我重寫了你的代碼

def update 
    @employee = Employee.find(params[:id]) 
    if params[:employee][:user_attributes].present? && params[:employee][:user_attributes][:role_ids].present? && params[:employee][:user_attributes][:role_ids].present?  
    unless @employee.user 
     user = User.new 
     @employee.user = user 
     temp_password = Devise.friendly_token.first(8) 
     user.is_temp_password = true 
     user.password = Devise.friendly_token.first(8) 
     user.email = @employee.email 
     user.email = params[:employee][:email] if params[:employee][:email] 
     user.save! 
    end 
    end 
相關問題