5

在 Rails 应用程序中,我有三个模型(Posting、Shop::Items 和 Directory::Items)。每个模型都与其他模型(用户、类别、城市......)有关系。我必须在主页上显示所有这些信息。它应该看起来像分页的项目列表。我正在为数据库使用 postgres。
我们可以在控制器中编写这样的代码:

@postings = Posting.includes(:category, :subcategory, :user, :city).all
@directory_items = Directory::Item.includes(:category, :user, :city).all
@shop_items = Shop::Item.includes(:category, :user, :city, :phone).all

并对结果进行排序。但这不是最好的方法。

第二种解决方案是编写自定义查询省略 ActiveRecord。但是这个查询非常大,而且很难支持它(我们在那里有很多连接)
用最少的数据库查询来解决这个问题的最佳解决方案是什么?(这是主页,所以它应该工作得非常快)。

4

2 回答 2

2

这里有一些不快的解决方案。

或者,您可以将sphinxthink sphinx gem 一起使用。这样它会又快又干净。

ThinkingSphinx.search classes: [Posting, Shop::Items, Directory::Items], page: params[:page] || 1, per_page: 10
于 2013-01-11T09:10:42.460 回答
0

由于查询将被缓存,因此只有排序需要时间。如果你不显示太多项目,开发人员的可读性远远超过了优化它的成本。如果性能确实是一个瓶颈,您总是可以做得更好,但是您仍然可以使用其他方法来使此代码过于复杂。

于 2013-01-11T14:51:43.577 回答