使用两个类和预加载思考 Sphinx 搜索

发布于 2024-09-27 04:33:31 字数 555 浏览 3 评论 0原文

我使用 TS 同时搜索 2 个模型(类):

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 使用急切加载?

I use TS to search trough 2 models (classes) at the same time:

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

In controller:

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

Is it possible somehow to use eager loading for :variants?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

千仐 2024-10-04 04:33:31

它有点难看,但它有效:

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

有更好的解决方案吗?

It's a little ugly but it works:

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

Is there a better solution?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文