Я бы посоветовал вам продолжить использовать ActiveRecord, но добавить логический атрибут, который определяет, какая из множества рекламных записей является активной. Я назвал это поле активным в следующем примере.
Затем вы можете проверить в модели, что активна не более одной записи. Проверка активного атрибута должна пройти успешно при любом из следующих условий
- Для активного атрибута установлено значение false
- Есть 0 записей с активным значением true.
- Для текущей записи уже установлен атрибут true в базе данных.
Следующий класс должен соответствовать вашим потребностям
class Ad < ActiveRecord::Base
named_scope :has_active, :conditions => {:active => true}
def validate
errors.add_to_base "You can only have one active advertisement"
unless self.active_flag_valid?
end
def active_flag_valid?
self.active == false ||
Ad.has_active.size == 0 ||
( Ad.has_active.size == 1 && !self.active_changed?)
end
end