6

有没有办法让数据库只允许一行(例如,用于站点范围的设置)?

4

3 回答 3

8
class Whatever < ActiveRecord::Base
  validate :there_can_only_be_one

  private

  def there_can_only_be_one
    errors.add_to_base('There can only be one') if Whatever.count > 0
  end
end
于 2013-01-18T16:36:17.447 回答
5

在 Rails 4 中:

class Anything < ActiveRecord::Base
  before_create :only_one_row

  private
  def only_one_row
    false if Anything.count > 0
  end
end

无声的错误是不好的,那么

class Anything < ActiveRecord::Base
  before_create :only_one_row

  private
  def only_one_row
    raise "You can create only one row of this table" if Anything.count > 0
  end
end
于 2015-10-06T14:26:00.833 回答
2

这一行只有一列吗?如果不是,则通过迁移添加新列可能会过大。您至少可以使该表包含“名称”和“值”列,并通过名称的唯一性进行验证。

于 2013-01-18T21:00:20.450 回答