重复条目的软数据库错误处理? - Rails 3.1新手

时间:2011-11-09 15:31:00

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

如果用户尝试在表格中输入重复的条目,则会出现整页讨厌的错误

ActiveRecord::RecordNotUnique in Admin::MerchantsController#add_alias

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

有没有办法给出一条flash消息,而不是像#34;这条记录已经存在"?

2 个答案:

答案 0 :(得分:0)

来自railsforum的

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