我有兩個子模型,稱爲:Service
和Product
,它繼承自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
在我的項目的某些部分,我得到了兩個型號的列表(獲得籃子),Service
和Product
。我需要檢查它是否有服務。
我的代碼檢查是:
def services_in?(acquire)
acquire.baskets.map(&:product).detect(&:service?)
end
代碼的工作,只有當我第一次通過服務和產品後!或者如果我只有其中一個。