Я создал функцию Postgres, которую я использую, чтобы выполнить сложный запрос, который объединяет многие таблицы, которые все должны быть отфильтрованы динамическим полем даты.Использовать функцию Postgres как ActiveRecord Model
Функция работает отлично и позволяет выполнить такой запрос, как "SELECT * FROM trail_for_date('2014-01-01')"
, и возвращает таблицу.
Упрощенный пример из документации Postgres по функциям:
CREATE FUNCTION sum_n_product_with_tab (x int)
RETURNS TABLE(sum int, product int) AS $$
SELECT $1 + tab.y, $1 * tab.y FROM tab;
$$ LANGUAGE SQL;
Как я могу использовать эту возвращенную таблицу в качестве модели Rails/Ruby, где аргумент функции является динамическим?
Что-то вроде следующего (которое, очевидно, не работает):
class SimplifiedExample < ActiveRecord::Base
self.table_name = 'sum_n_product_with_tab(:dynamic_input)'
end
Это исходный маршрут, по которому я пошел, но в моем запросе мне нужно присоединиться к пяти таблицам, которые все фильтруют на одну дату и выполняют вычисления на основе этой даты ... Поэтому мне нужно иметь возможность передавать какие-то переменную или использовать функцию для выполнения этого (я думаю). –
Я полагаю, что мог бы, хотя это был вопрос с более чем 100 строк, и мне пришлось бы синхронизировать мой запрос с функцией базы данных, которую реализовали ребята из базы данных. –
Или вы можете использовать isl 'Model.select (Arel :: Nodes :: NamedFunction.new ('sum_n_product_with_tab', 6)). To_sql' –