У меня есть проверка для модели Activity, и это действие create в activity_controller. Когда я пытаюсь сохранить модель, не выполняя проверки, создается дополнительный экземпляр действия. Почему создается действие, когда оно не проходит валидацию?
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!
Приложение работает правильно, когда я перемещаю сохранение комментария в после сохранения действия. Я полагаю, что сохранение комментария, связанного с несохраненным действием, приводит к сохранению действия?