使用布尔或has_many通过?

时间:2011-03-11 18:53:40

标签: ruby ruby-on-rails-3 has-many-through

我有一个产品型号,一个状态模型和一个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,它就不能在系统中向后移动(所以我不创建公共404)。产品必须始终具有这三种中的一种才有效。

我还使用产品上不同“标志”的状态:

  • retired当产品不再可用时(此产品也将始终具有approved状态; approved ==可在我们的站点地图中公开转发,但retired会将其删除来自我们网站上的任何地方(索引,档案等),而没有404'永久链接)
  • pre-sale当产品尚不可用时(可能具有以上三种产品中的任何一种)
  • needs-images(可能有三个中的任何一个)

我的问题有点像两个人:

  1. 我是否应该在产品型号上制作“旗帜”状态布尔值?我问因为:

  2. 如何编写一个说approved but not retired的范围?或approved but not retired and not needs-images

  3. 使用布尔值,我可以只有一个范围 scope :not_foo where(:foo = false)并将这些全部链接起来。我正在用最好的方法在上面的设置中做同样的事情。我认为has_many :through设置是要走的路(在我的数据库中,标志布尔似乎有点过多falses)但数据库结构/规划并不是我的强项。

1 个答案:

答案 0 :(得分:0)

我建议将state machine用于产品流pre-saleapprovedretired以及needs-images的布尔标志,以指示其他状态流动。