0
我有三種型號:Employee
,User
和Role
。這些類別之間的關係是:employee
--- one_to_one - user
和user
- one_to_many - role
。Rails更新一到一對多 - 創建子對象(如果不存在)
我創建行動是工作的罰款與下列強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
看起來好像你正在保存新的用戶記錄給我。 – DMH
可能在實例化新用戶之後,還應該通過調用@ employee.user.save – Brozorec
來保存它。我希望更新和保存發生在同一事務中。 – dnyanesh