Rails ActiveRecord数据库只有一行

Yo *_*dke 6 mysql ruby-on-rails rails-activerecord

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

Uni*_*key 7

class Whatever < ActiveRecord::Base
  validates :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
Run Code Online (Sandbox Code Playgroud)

  • 如果有其他人想要使用它:这有一个缺点,一个新的Whatever保存后无效,可以通过`||修复它 Whatever.first == self`条件 (2认同)

Mac*_*eus 5

在 Rails 4 中:

class Anything < ActiveRecord::Base
  before_create :only_one_row

  private
  def only_one_row
    false if Anything.count > 0
  end
end
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)