【发布时间】:2015-10-08 14:09:42
【问题描述】:
我有三个模型:Employee、User 和 Role。这些类之间的关系是employee --- one_to_one -- user 和user -- one_to_many -- role。
我的创建操作在使用以下强大的参数方法时运行良好
def employee_params
params.require(:employee).permit(:first_name, :middle_name, :last_name, :email, user_attributes: [:id, role_ids:[]])
end
对于如果员工记录没有用户对象的更新,我正在实例化新用户,将其映射到员工并通过传递字符串参数调用更新。但是,更新失败并显示消息:
保存新关联用户失败
我的更新方法代码是
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
【问题讨论】:
-
您似乎没有将新的用户记录保存给我。
-
可能在实例化新用户之后,你也应该通过调用@employee.user.save 来保存它
-
好的。我希望更新和保存发生在同一个事务中。
标签: ruby-on-rails ruby controller