我有一个产品型号,一个状态模型和一个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
(可能有三个中的任何一个)我的问题有点像两个人:
我是否应该在产品型号上制作“旗帜”状态布尔值?我问因为:
如何编写一个说approved but not retired
的范围?或approved but not retired and not needs-images
?
使用布尔值,我可以只有一个范围
scope :not_foo where(:foo = false)
并将这些全部链接起来。我正在用最好的方法在上面的设置中做同样的事情。我认为has_many :through
设置是要走的路(在我的数据库中,标志布尔似乎有点过多falses
)但数据库结构/规划并不是我的强项。