2010-10-11 2 views
0

я использую TS для поиска корыта 2 модели (классы), в то же время:Думая поиск Sphinx с двумя классами и жадной загрузкой

class Product < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :photo 
    has_many :variants 
end 

class Article < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :photo 
end 

В контроллере:

@item_facets = ThinkingSphinx.facets(options[:search], 
             :classes => [Product, Article], 
             :include => [:user, :photo]) 
@items = @items_facets.for 

возможен ли это как-то используйте желаемую загрузку для :variants?

ответ

0

Это немного некрасиво, но это работает:

ids = @items.select { |item| item.is_a?(Product) }.map(&:variant_id) 
variants = {} 
Variant.find(ids).each { |v| variants[v.id] = v } 
@items.each do |item| 
    item.variant = variants[item.variant_id] if item.is_a?(Product) 
end 

Есть ли лучшее решение?