0

我有一个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。即使它运行成功(创建很多模型)或不成功(不保存它们),id模型User也是自动递增的。因此,每次尝试使用我的FormObject增量来保存id用户的 next 值。创建成功时这是正常情况User,但如果用户在注册表单上填写错误则不正常。

如何禁用这种不可预测的行为?

PS我知道当我在方法@user = User.new(@params[:user])的开头和结尾编写时一切正常,但是有很多关联,我不想在我的模型中写很多或。create@user.saveautosaveinverse_of

PPS 我是postgresql-9.4用户

4

2 回答 2

0

您的交易无效,因为您正在使用create. 您需要使用 bang 版本 ( create!) 来引发触发回滚的失败异常。请注意,您需要自己rescue处理InvalidRecord异常。

于 2015-06-25T08:22:49.707 回答
0

在我看来,它可能是这样的:

  def create
    @user = User.new(params[:user])

    respond_to do |format|
      if @user.save
         process_bonuses_for_user
         process_actions_for_user
         # et.c., giant amount of methods
         ...
         format.html { redirect_to ... }
      end
    end
于 2015-06-25T10:39:43.210 回答