Можете ли вы создать модель рельсов с поддержкой базы данных без таблицы?

У меня есть сложный 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.

1 ответ

Привет, надеюсь, этот ответ поможет вам, это должен быть комментарий, а не ответ (еще недостаточно кармы для этого)

что вы можете сделать, так это создать представление в своей базе данных,

      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

теперь вы можете ссылаться на свою модель.

Остерегайтесь, что таблицы просмотра не будут отображаться в схеме по умолчанию, для их просмотра вы должны поместить их в свой application.rb:

      config.active_record.schema_format = :sql

ваше здоровье.

Другие вопросы по тегам