如果用户尝试在表格中输入重复的条目,则会出现整页讨厌的错误
ActiveRecord::RecordNotUnique in Admin::MerchantsController#add_alias
Mysql2::Error: Duplicate entry '2-a' for key 'merchant_id': ..
有没有办法给出一条flash消息,而不是像#34;这条记录已经存在"?
答案 0 :(得分:0)
This thread可以帮助您
答案 1 :(得分:0)
我不建议通过flash消息检查唯一性并专门响应此验证规则,这通常应该由表单的错误消息处理。
尽管如此,在用于创建和更新的控制器操作中,您可以包装决定在何处发送用户的条件块,并首先检查唯一性:
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