Я управляю исследовательской базой данных с помощью Ruby on Rails. Вводимые данные в основном используются учеными, которые предпочитают располагать всю необходимую информацию для исследования в одной единой массивной таблице для использования в выбранной ими статистической программе. В настоящее время я представляю его как CSV, так как это очень просто сделать и совместимо с инструментами, которые люди хотят использовать.
Я написал много представлений (вид SQL, а не тип Rails HTML / ERB), чтобы сделать вывод, который они ожидают, реальностью. Некоторые из этих представлений довольно велики и имеют достаточную сложность. Я написал их на SQL, потому что есть много вычислений и сравнений, которые легче сделать с SQL. В настоящее время они загружаются в базу данных прямо из файла с именем views.sql
. Чтобы получить запрошенные данные, я делаю select * from my_view;
.
Файл views.sql
становится довольно большим. Частично проблема заключается в том, что мы все еще выясняем, что означают собираемые нами данные, поэтому в представлениях постоянно вносится множество изменений - и создается множество из них. Многие из них должны быть повторяемыми.
Недавно я столкнулся с проблемами организации и тестирования этих представлений. Rails отлично работает для пользовательского интерфейса и бизнес-логики, но я не знаю существующей структуры для обработки необходимых нам отчетов.
Некоторые варианты, о которых я подумал:
- Должен ли я как-то перенести их в наиболее подходящие модели? Несколько представлений взаимодействуют друг с другом, что делает эту ситуацию более сложной, чем просто выполнение одного
find_by_sql
, поэтому я не знаю, должны ли они быть только частью модели.
- Возможно, они должны рассматриваться как "представление" в смысле MVC? (То есть они могут быть перемещены в
app/views/
и жить вместе с HTML, возможно, в виде файлов с именем, подобным my_view.csv.sql
, которые возвращают CSV.)
Как бы вы справились с такой сложной отчетной проблемой, как эта?
ОБНОВЛЕНИЕ для Младена Яблановича
Это началось с того, что у нас было несколько представлений для отчетности. Мой начальник решил, что они хотят большего, поэтому я начал писать больше. Некоторые дают пару сотен столбцов данных, основываясь на требованиях, которые мне дали.
Теперь у меня есть пара тысяч линий просмотра, которые объединены в один файл. Мне не нравится такая ситуация, поэтому я хочу реорганизовать / реорганизовать код. Я также хотел бы получить простой способ предоставления CSV - в настоящее время я выполняю запросы и отправляю их по электронной почте, что может быть легко автоматизировано. Наконец, я хотел бы иметь возможность написать несколько тестов для вывода представлений, так как пара регрессий уже появилась.