我有一个接受嵌套属性的用户模型:
class User < ActiveRecord::Base
has_many :skills
accepts_nested_attributes_for :skills
end
在我的控制器中,我正在更新交易内的用户:
def update
@user = current_user
@profile = current_profile
begin
User.transaction do
@user.update_attributes!(user_params)
@profile.update_attributes!(profile_params)
end
redirect_to user_path(@user)
rescue
render :edit
end
end
当用户更新成功但配置文件更新失败(即验证错误等)时,将使用嵌套技能呈现编辑模板。奇怪的是,嵌套技能属性具有ID,因此当我重新提交编辑表单时,我得到:
ActiveRecord::RecordNotFound
Couldn't find Skill with ID=123 for User with ID=456
我相信这里发生的事情是,由于用户更新成功,因此创建了嵌套技能。配置文件更新失败,并回滚整个事务(包括技能)。我希望在重新呈现表单时,新创建的技能的ID应为空白。
这是一个错误吗?这里有更好的方法吗?
谢谢!