Использовать логические или has_many через? - PullRequest
1 голос
/ 11 марта 2011

У меня есть модель Product, модель Status и модель Productstatuses.

Product has_many :productstatuses, :dependent => :destroy
Product has_many :statuses, :through => :productstatuses

Status has_many :productstatuses
Status has_many :products, :through => :productstatuses

Productstatus belongs_to :product
Productstatus belongs_to :status

Я использую статусы двумя способами.

Во-первых, чтобы показать, как продукт проходит через нашу систему (статусы bookmark, processing, approved. Как только продукт имеет статус approved, он не может двигаться назад в системе (так что я не t создать общедоступный 404). Продукт должен иметь один из этих трех, чтобы быть действительным.

Я также использую статусы для разных «флагов» на товарах:

  • retired когда продукт больше не доступен (этот продукт также всегда будет иметь статус approved; approved == публично индексируется в нашей карте сайта, но retired удаляет его из любого места на нашем сайте (индекс, архивы и т. д.) без постоянной ссылки 404)
  • pre-sale когда продукт еще не доступен (может иметь любой из трех выше)
  • needs-images (может иметь любой из трех)

Мой вопрос немного двухсторонний:

  1. Должен ли я только что сделать статусы "флагов" логическими для модели Продукта? Я спрашиваю, потому что:

  2. Как мне написать область действия, которая говорит approved but not retired? Или approved but not retired and not needs-images?

С логическим значением у меня может быть просто видимость scope :not_foo where(:foo = false) и объедините их в цепочку. Я рисую пробел на лучший способ сделать то же самое с вышеупомянутой настройкой. Я думал, что установка has_many :through была подходящим вариантом (флаги как булевы значения в моей базе данных показались мне избыточными falses), но структура / планирование базы данных не моя сильная сторона.

1 Ответ

0 голосов
/ 11 марта 2011

Я бы предложил использовать конечный автомат для потока продукта pre-sale, approved и retired и логический флаг для needs-images для указания дополнительного состояния, которое находится вне потока.

...