同时从数据库中检索许多不同类型的模型

时间:2013-09-05 17:56:19

标签: sql ruby-on-rails ruby activerecord ruby-on-rails-4

我在我的ruby on rails博客项目中设置了许多不同的模型。目前,不同的模型类型是文章,快速提示,引用和定义。我创建了一个页面,我想在创建时按照单个流程显示所有这些内容。

问题:根据创建日期排序的所有内容类型中选择的特定数量项目的智能/高效方法是什么。

希望说明伪代码:

Db.load([:Tip, :Quote, :Article, :Definition]).order_by(:created_at).limit(10)

到目前为止,我自己提出的最佳解决方案是加载每个类别的10个项目,对它们进行排序并选择最新的10个排序列表。 :P

3 个答案:

答案 0 :(得分:0)

只需将它们组合起来。

(Tip.all + Quote.all + Article.all + Definition.all).order_by(:created_at).limit(10)

或者

tips = Tips.all.limit(10)
quotes = Quotes.all.limit(10)
(tips + quotes).order_by(:created_at).limit(10)

明白了吗?

Possibly useful similar question

答案 1 :(得分:0)

[Tip, Quote, Article, Definition].map{|model_name| model_name.order(:created_at).first(10)}

答案 2 :(得分:0)

所以做我想做的事情的方法是创建一个超类,比如Post,并让所有其他内容类型继承自这个模型。这将创建一个单表继承方案,其中所有子类属性都与“posts”表一起保存,并且“type”属性可以区分内容类型。我仍然可以正常使用所有内容类型,但也可以获得Posts模型,我可以同时查询和排序所有内容类型。

More information about the technique can be found here