【发布时间】:2015-09-11 17:23:35
【问题描述】:
我有一个 FormObject 用于注册,它在 create 方法中为他创建了一个用户和 很多 模型。
def create
ActiveRecord::Base.transaction do
@user = User.create(@params[:user])
process_bonuses_for_user
process_actions_for_user
# et.c., giant amount of methods
end
@user.persisted? # to return the true of false to controller
end
我遇到了FormObject 的奇怪行为。即使它运行成功(创建很多模型)或不成功(不保存它们),User 模型的id 也是自动递增的。因此,每次尝试使用我的FormObject 保存某些内容时,都会为用户增加下一个id 的值。这是User创建成功的正常情况,但当用户在注册表单上出错时就不正常了。
如何禁用这种不可预测的行为?
附:我知道当我在create方法的开头写@user = User.new(@params[:user])和在结尾写@user.save时一切正常,但是有很多关联,我不想写很多autosave或 inverse_of 在我的模型中。
附言我是postgresql-9.4用户
【问题讨论】:
标签: ruby-on-rails ruby postgresql activerecord service-object