У меня есть две подмодельные модели: 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
код работает, только если я прохожу услуги первой и продукты после !! Или, если у меня есть только один из них.