我有一个复杂的SQL查询,它使用group_by
聚合列。
IndividualOrder.select(SUM(...) as amount, other_fields).group_by("organization.id")
问题是:我从IndividualOrder
得到了一个ActiveRecord::Relation,这在概念上已经不是真正的结果了。我不完全确定如何将其转换为一种新方法。如果我使用arel
来处理它,我通常仍然必须使用IndividualOrder.arel_table
,它仍然会转换为我选择的任何内容。
我只想获取字段[:amount, :organization, :other]
,并能够与它们交互,就像我将这些值作为表的数据库支持模型一样。
因此,它不是一个完全无表的模型(通常不支持数据库(,也不是一个实际的模型,因为它是一个生成的查询。
这是风景区的用例吗?在我通过ActiveRecord
进行的查询中,我不得不浏览两个变量。
嗨,希望这个答案能帮助你,这应该是一个评论而不是一个答案(还没有足够的因果报应(
您可以做的是在数据库中创建一个视图
rails g migration my_new_view
ActiveRecord没有为我们提供任何创建视图的方法,因此您将不得不执行";手动";或者你可以使用特定的宝石来做这些。
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
现在您可以在模型中引用。
注意,默认情况下,视图表不会显示在模式中,因为您必须将它们放在应用程序中。rb:
config.active_record.schema_format = :sql
欢呼。