Отображение данных в Ruby on Rails

Есть ли способ для ActiveRecord захватить все поля базы данных, включая Pks и FK? Как то, что делает сценарий ORM DBIx :: Class на Catalyst?

Вот краткое описание этого:

Сгенерируйте модель с помощью скрипта Catalyst "_create.pl"

сценарий:

$ rm lib/MyApp/Model/DB.pm 

$ script/myapp_create.pl model DB DBIC::Schema MyApp::Schema \ create=static components=TimeStamp,PassphraseColumn \ 'dbi:Pg:dbname=catappdb' 'catappuser' 'catalyst' '{ AutoCommit => 1 }'

Подробнее о DBIx :: Класс

Итак, мне нужно иметь возможность создать свою БД с помощью sql, а затем просто запустить сценарий, чтобы ORM ActiveRecord Rail отображал все таблицы и отношения.

(извините за мой плохой английский: 3)


person xCanox    schedule 03.04.2014    source источник
comment
Rails делает это по умолчанию? Нет необходимости запускать какой-либо скрипт, но учтите, что вы не должны обновлять свою базу данных с помощью чистого sql - используйте миграции.   -  person BroiSatse    schedule 04.04.2014
comment
Для использования DBIx :: Class не требуется катализатор.   -  person Len Jaffe    schedule 05.04.2014


Ответы (1)


Вы должны объявить свои отношения в своей модели ActiveRecord аналогично тому, как вы должны объявить их в DBIx :: Class. Ни DBIx :: Class, ни ActiveRecord ничего не знают о ваших FK, если вы не объявляете их в классе Model.

person Len Jaffe    schedule 04.04.2014
comment
Спрашивающий имеет в виду возможность генерировать базовые файлы ORM и базу отношений на основе существующей схемы БД. Это довольно распространенная функция ORM. Например. DBIx :: Class позволяет создавать схему БД из определенных файлов классов ORM или наоборот, создавать файлы классов ORM путем чтения схемы БД и создания из нее файлов классов с отношениями, определяемыми следующими ограничениями внешнего ключа. - person kbenson; 11.04.2014
comment
Я не помню, чтобы DBIC :: Schema :: Loader генерировал для меня операторы отношений. Это не значит, что это не просто не для меня, когда я его использовал. Генераторы Rails никогда не добавляли отношения к моим моделям - person Len Jaffe; 11.04.2014
comment
В моем конкретном случае (Percona MySQL с использованием InnoDB) мой предпочтительный метод работы с отношениями - это создание ограничений внешнего ключа, а затем просто повторный запуск dbicdump, что я делаю каждую неделю или две, поэтому я знаю, что он работает. Возможно, поддержка не полностью реализована для всех СУБД. - person kbenson; 12.04.2014
comment
Предоставляется. Но вопрос в активной записи, а активная запись склоняется к поддержанию отношений в приложении, а не через FK. Это связано с тем, что если FK не имеют тенденцию охватывать серверы, поэтому, если вы разделяете свои данные, строка на одном сегменте обычно не может иметь связанных строк на любом другом сегменте. Группировка связанных данных часто бывает полезной, но она также ограничивает параллелизм. - person Len Jaffe; 15.04.2014
comment
Я просто комментировал ваше утверждение, что ни DBIx :: Class, ни ActiveRecord ничего не знают о ваших FK, если вы не объявляете их в классе Model, с более конкретной информацией о DBIx :: Class. DBIx :: Class также позволяет определять отношения вручную или их комбинацию (которую я использую). Сгенерированные файлы содержат # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:PqQ8s2YshkI0T6s1Avqnbw, после чего вы можете поместить свои собственные данные определения, методы и т. Д. Я согласен с тем, что принуждение к использованию FK для отношений было бы слишком ограничивающим. - person kbenson; 24.04.2014
comment
после того, как вы сгенерируете свою модель, ваши данные о взаимоотношениях внешнего ключа будут в вашей модели. Он не извлекается из словаря данных, если вы не используете загрузчик схемы во время выполнения. В общем, вам не нужна база данных, не определяющая FK. Если вы достаточно большой, чтобы разбить свой БД, поздравляю, вы элита. - person Len Jaffe; 24.04.2014
comment
Первоначальный вопрос касался автоматического создания модели из схемы. Ваш ответ подразумевает, что DBIx :: Class не может сгенерировать модель, потому что он не знает о FK, которые вы не установили сами, что в свете вопроса я интерпретировал как несколько дезинформированный. Я не уверен, где тут дело об элитарности, я просто согласился с вашим предыдущим комментарием относительно автоматической генерации схемы сегментированных данных и указал на особенность. - person kbenson; 24.04.2014
comment
Вы правы, за исключением того, что я никогда не видел активной записи FK информации о захвате во время генерации. - person Len Jaffe; 24.04.2014