Ваше условие проверяет не ту вещь.Это:
if @product.product_code.present?
только проверяет, присутствует ли product_code
в @product
, который вы только что сделали, он не проверяет, есть ли уже что-нибудь в базе данных с этим кодом продукта.
Я думаю, вы хотите что-то более похожее на это:
@existing_product = Product.find_by(product_code: @product.product_code)
if @existing_product
flash.now[:error] = ...
render 'new'
elsif @product.save
redirect_to @product
else
render 'new'
end
Вы можете использовать find_by
, чтобы найти то, что вы ищете, которое либо даст вам продукт, либо nil
, если его нет.t соответствующий продукт.
Возможно, вы захотите взглянуть на пару других вещей:
- Было бы лучше использовать помощник по URL, а не создавать ссылку вручную.
- Ваша модель должна проверять уникальность кодов продукта, а не контроллера.
- Как отмечает Дориан в комментариях, HTML во флэш-сообщениях не лучшая идея.Вам лучше проверить
@existing_product
в представлении, а затем установить ссылку и любое «сложное» сообщение об ошибке, которое вам нужно полностью в представлении.