0

我对活动模型进行了验证,这是活动控制器中的创建操作。当我尝试在不满足验证的情况下保存模型时,正在创建一个额外的活动实例。为什么在验证失败时会创建一个活动?

def create
    @activity_last = Activity.find(params[:activity_id])
    @activity = @activity_last.dup
    @activity.activity_date = Time.now

    respond_to do |format|
      if @activity.update_attributes(params[:activity])
        format.html { redirect_to @activity.tenant, notice: 'Activity was successfully created.' }
        format.json { render json: @activity.tenant, status: :created, location: @activity.tenant }
      else
        format.html { render action: "new" }
        format.json { render json: @activity.errors, status: :unprocessable_entity }
      end
    end
  end

我在这里使用 dup 的原因是因为我想创建最新活动的副本,然后从参数更新其属性的子集。因此,为了解释起见,假设 Activity 有 10 个属性。用户将转到具有其中 3 个属性的字段的表单。然后,我想创建一个新活动,该活动具有与用户未更新的属性的最新活动相同的所有属性值。

- 更新 -

我已经发现了为什么会这样。我缩短了上面的代码,以便减少混乱,但作为缩短的一部分,我删除了以下几行:

@comment = Comment.new(params[:comment])
@comment.user = current_user
@comment.activity = @activity
@comment.save!

当我将评论的保存移至活动保存后,该应用程序可以正常工作。我的猜测是保存链接到尚未保存的活动的评论会导致活动被保存?

4

0 回答 0