Я бы не рекомендовал проверять уникальность и специально реагировать на это правило проверки с помощью флеш-сообщения. Обычно это должно обрабатываться сообщениями об ошибках формы.
Тем не менее, в действиях контроллера для создания и обновления вы можете обернуть условный блок, который решает, куда отправить пользователя, с проверкой на уникальность сначала:
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