2016-05-24 104 views
0

我有兩個子模型,稱爲:ServiceProduct,它繼承自ProductBase。我有另一個模型來消費它。 Acquire有很多AcquireBasket。看看我的代碼:遍歷STI列表中的軌道4

product_base.rb:

class ProductBase < ActiveRecord::Base 
    extend ::EnumerateIt 
    include Searchable 

    self.table_name = 'products' 
    end 

product.rb:

class Product < ProductBase 
    default_scope { where(kind: ProductKind::PRODUCT) } 

    def initialize(attributes = {}) 
     super(attributes) 
     self.kind = ProductKind::PRODUCT 
     self.status = ProductStatus::DRAFT 
    end 
    end 

service.rb:

class Service < ProductBase 
    default_scope { where(kind: ProductKind::SERVICE) } 

    def initialize(attributes = {}) 
     super(attributes) 
     self.kind = ProductKind::SERVICE 
     self.status = ProductStatus::DRAFT 
    end 
    end 

acquire_basket.rb:

class AcquireBasket < ActiveRecord::Base 
    extend ::EnumerateIt 

    belongs_to :acquire 
    belongs_to :product 
end 

在我的項目的某些部分,我得到了兩個型號的列表(獲得籃子),ServiceProduct。我需要檢查它是否有服務。

我的代碼檢查是:

def services_in?(acquire) 
    acquire.baskets.map(&:product).detect(&:service?) 
end 

代碼的工作,只有當我第一次通過服務和產品後!或者如果我只有其中一個。

回答

0

我無法找到在世界各地的博客帖子的答案,所以我將與大家分享:

class AcquireBasket < ActiveRecord::Base 
    extend ::EnumerateIt 

    belongs_to :acquire 
    belongs_to :product, class_name: 'ProductBase' 
end 

的問題是,當我試圖找到(懶洋洋)中的ActiveRecord ::關係,Rails查找(我認爲)只是Product模型。它無法在其中找到其他類型的模型。所以使用這個錯字我把它運作起來。

1

你應該能夠利用descendents方法迭代所有的小類