Ruby on rails 将两个ActiveRecord模型合并为一个

Ruby on rails 将两个ActiveRecord模型合并为一个,ruby-on-rails,activerecord,model,Ruby On Rails,Activerecord,Model,我正在开发的Rails应用程序有两种模型:Review和Interview。它们本质上都是文章,但它们的属性和行为不同 应用程序的一些页面需要同时显示评论和访谈,就好像它们来自同一个模型一样。这意味着我需要以某种方式将它们组合到一个模型中,然后将所述模型用作“代理” 通过使用以下代码实现一个文章模型,我获得了一个基本结果: class Article MODELS = [Review, Interview] def self.fetch(&block) block =

我正在开发的Rails应用程序有两种模型:
Review
Interview
。它们本质上都是文章,但它们的属性和行为不同

应用程序的一些页面需要同时显示评论和访谈,就好像它们来自同一个模型一样。这意味着我需要以某种方式将它们组合到一个模型中,然后将所述模型用作“代理”

通过使用以下代码实现一个
文章
模型,我获得了一个基本结果:

class Article
  MODELS = [Review, Interview]

  def self.fetch(&block)
    block = Proc.new { all } unless block_given?
    results = []

    MODELS.each do |model|
      suppress(StandardError) do
        results.push(*model.class_eval(&block))
      end
    end

    results
  end
end
这为我提供了所需的基本功能。我现在可以使用类似于
Article.fetch{where(“created_at>=?”,10.days.ago.to_date)}
的东西,在两个模型上运行相同的查询,给我一组结果(不是按日期排序,而是实际上是将评论和访谈分块在一起,因为它们来自两个不同的查询)

这种方法似乎有效,但也有一些重要的缺点。
一个重要的问题是,如果希望结果正确排序,任何类型的排序都必须在查询后手动实现


我在实现自己的方法来解决遇到的问题方面没有问题,但我想知道在Rails中是否有更标准的方法来实现这一点。

看看您的问题,您基本上有两个具有不同属性和行为的模型

一种方法是创建一个父类,其中有两个子类继承自父类

课堂文章

课堂复习
课堂访谈


使用单表继承(STI)方法,您只需创建一个类型列来区分这两种类型,并根据子类进行验证和列填充。

我是否必须在同一个表上拥有两个模型所需的所有列,也是?如果您需要将它们放在同一张表上,则是,并且验证将基于类