1

我有一个复杂的 SQL 查询,它使用group_by.

IndividualOrder.select(SUM(...) as amount, other_fields).group_by("organization.id")

问题是:我从 得到一个 ActiveRecord::Relation IndividualOrder,这实际上不再是概念上的结果。我不完全确定如何将其转换为新方法。如果我用arel它来处理它,我通常仍然必须去IndividualOrder.arel_table,它仍然会投射到我选择的任何东西上。

我只想获取这些字段[:amount, :organization, :other]并能够与它们进行交互,就像将这些值作为表的数据库支持模型一样。

所以,它不是一个无表模型(通常不是数据库支持的),也不是一个实际的模型,因为它是一个生成的查询。

这是风景的用例吗?我不得不在我正在执行的查询中浏览 2 个变量ActiveRecord

4

1 回答 1

1

您好希望这个答案对您有所帮助,这应该是评论而不是答案(还没有足够的业力来做那件事)

你可以做的是在你的数据库中创建一个视图,

rails g migration my_new_view

ActiveRecord 没有为我们提供任何创建视图的方法,因此您必须“手动”执行,或者您可以使用特定的 gem 来执行这些操作。

 class MyNewView < ActiveRecord::Migration[5.2]

  def change
    reversible do |dir|
      dir.up do
        execute <<-SQL
          CREATE OR REPLACE VIEW public.my_new_view AS

            # your sql query here SELECT ....
            SQL
      end

      dir.down do
        execute <<-SQL
          DROP VIEW IF EXISTS public.my_new_view;
        SQL
      end
    end
  end

end

现在你可以在你的模型中引用。

注意默认情况下视图表不会显示在模式中,要查看它们,您必须放入 application.rb:

config.active_record.schema_format = :sql

干杯。

于 2020-12-17T00:09:28.890 回答