我在我的ruby on rails博客项目中设置了许多不同的模型。目前,不同的模型类型是文章,快速提示,引用和定义。我创建了一个页面,我想在创建时按照单个流程显示所有这些内容。
问题:根据创建日期排序的所有内容类型中选择的特定数量项目的智能/高效方法是什么。
希望说明伪代码:
Db.load([:Tip, :Quote, :Article, :Definition]).order_by(:created_at).limit(10)
到目前为止,我自己提出的最佳解决方案是加载每个类别的10个项目,对它们进行排序并选择最新的10个排序列表。 :P
答案 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)
明白了吗?
答案 1 :(得分:0)
[Tip, Quote, Article, Definition].map{|model_name| model_name.order(:created_at).first(10)}
答案 2 :(得分:0)
所以做我想做的事情的方法是创建一个超类,比如Post,并让所有其他内容类型继承自这个模型。这将创建一个单表继承方案,其中所有子类属性都与“posts”表一起保存,并且“type”属性可以区分内容类型。我仍然可以正常使用所有内容类型,但也可以获得Posts模型,我可以同时查询和排序所有内容类型。