как спасти ActiveRecord :: Ошибка RecordNotUnique в контроллере и повторной визуализации?

Вы рассмотрели использование packrat ?

packrat::clean(), например, удаляли неиспользуемые пакеты.

0
задан sabaeus 13 July 2018 в 18:33
поделиться

2 ответа

Прямой ответ заключается в том, чтобы спасти конкретное исключение, из которого вы хотите восстановить, а затем обработать его, как вы считаете нужным ... что-то вроде:

def create
  @boo = current_user.my_boos.new(boo_params)
  respond_to do |format|
    begin
      if @boo.save
        format.html { redirect_to root_path, notice: "Thanks!" }
        format.json { render :index, status: :created, location: @boo }
      else
        format.html { render :new }
        format.json { render json: @boo.errors, status: :unprocessable_entity }
      end
    rescue PG::UniqueViolation
      format.html { render :new }
      format.json { render json: ["We've already got one"], status: :unprocessable_entity }
    end
  end
end

(спасение StandardError должно работать так же, как ну, но в то же время безопасный, он намного шире, чем нам нужно.)

Однако я бы предположил, что более «Railsy» решение должно определить валидацию уникальности в вашей модели, в дополнение к ограничению DB , поэтому он будет обрабатываться существующим if @boo.save условным.

1
ответ дан matthewd 17 August 2018 в 12:15
поделиться

Вы можете добавить подтверждение к своей модели Boo, это предотвратит попытку сохранить недействительную запись и не будет необходимости спасать от ошибки PG :: UniqueViolation:

class Boo < ApplicationRecord
  # ...
  validates :name, uniqueness: { scope: :title }
  # ...
end

( c) http://guides.rubyonrails.org/active_record_validations.html#uniqueness

1
ответ дан Mobile Perpetuum 17 August 2018 в 12:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: