Мягкая дБ обработка ошибок для повторяющихся записей?- Rails 3.1 новичок - PullRequest
0 голосов
/ 09 ноября 2011

Если пользователь пытается ввести повторяющуюся запись в таблицу, он получает полную страницу с неприятной ошибкой

ActiveRecord::RecordNotUnique in Admin::MerchantsController#add_alias

Mysql2::Error: Duplicate entry '2-a' for key 'merchant_id': ..

Есть ли способ вместо этого дать флэш-сообщение типа "Эта запись уже существует"?

Ответы [ 2 ]

0 голосов
/ 09 ноября 2011

Я бы не рекомендовал проверять уникальность и специально реагировать на это правило проверки с помощью флеш-сообщения. Обычно это должно обрабатываться сообщениями об ошибках формы.

Тем не менее, в действиях контроллера для создания и обновления вы можете обернуть условный блок, который решает, куда отправить пользователя, с проверкой на уникальность сначала:

def create
  @merchant = Merchant.new params[:merchant]
  if Merchant.where(:merchant_id => @merchant.id).count > 0
    flash[:error] = "The merchant id #{@merchant.id} already exists"
    render :create    # amend this to :update when applying to the update action
  else
    # your normal generated save and render block
  end
end

Это не самый чистый способ достижения вашей цели, но я думаю, что это будет легче понять.

Действительно рекомендовал бы вместо этого проверки моделей и сообщения об ошибках формы, которые, если вы используете сгенерированные леса, все, что вам нужно сделать, это добавить проверку модели, и форма выдаст пользователю сообщения об ошибках:

# app/models/merchant.rb
class Merchant < ActiveRecord::Base
  validates_uniqueness_of :merchant_id
end
0 голосов
/ 09 ноября 2011

Эта ветка от railsforum может вам помочь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...