2011-03-11 54 views
1

我有一個產品模型,一個狀態模型和一個Productstatuses模型。使用布爾值或has_many通過?

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'ing其永久)
  • 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),但數據庫結構/規劃並不是我的強項。

回答

0

我建議使用state machine爲產品流pre-sale,爲needs-imagesapprovedretired和一個布爾標誌,用於指示附加狀態是退出該流程。

+0

感謝您的建議。任何理由爲什麼過渡可以通過aasm或其他方式? – jaacob 2011-03-11 22:55:48

+0

沒有什麼大的區別,只需簡短地看一下它們,然後使用一個更容易啓動的功能,功能提供了類似的接口 – mpapis 2011-03-11 23:05:20