Ich habe zwei Untermodelle, genannt: Service
und Product
, die von ProductBase
erbt. Und ich habe ein anderes Modell, um es zu konsumieren. Acquire
das viele AcquireBasket
haben. Schauen Sie sich mein Code:Iterate über STI-Liste in Schienen 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
In einem Teil meines Projekts bekomme ich eine Liste (erwerben Körbe) von beiden Modellen, Service
und Product
. Und ich muss überprüfen, ob ich darin Dienste habe.
Mein Code zu überprüfen war:
def services_in?(acquire)
acquire.baskets.map(&:product).detect(&:service?)
end
Der Code funktioniert nur, wenn ich Dienste passieren zuerst und Produkte nach !! Oder wenn ich nur einen von ihnen habe.