如何处理 Rails 中的数据库错误?

How to handle database errors in Rails?

我在 table

的迁移中有这个
t.string :name, :null => false

当用户尝试使用空名称保存模型时,会出现错误。我该如何处理它并回馈美丽的信息?我不想使用验证

validates :name, presence: true

您可以尝试 Migrations Validators 项目 (https://github.com/vprokopchuk256/mv-core)。它允许您在数据库级别定义验证。

示例:

def change
  create_table :items do |t|
    t.string :name, presence: true
  end
end

并且可以定义事件漂亮消息:

def change
  create_table :items do |t|
    t.string :name, presence: {message: 'not beautiful', as: :trigger}
  end
end

在这种情况下,验证将被定义为触发器内的条件。您可以定义该触发器名称或触发器事件。只需查看项目文档即可。如果验证失败,则会出现带有指定消息的数据库异常。

如果你想从容地处理来自该约束的错误,你可以这样做:

class Item < ActiveRecord::Base
  enforce_migration_validations
end

结果:

Item.new(name: nil).valid?
=> false

Item.new(name: 'Mr. Smith').valid?
=> true