Ответ 1
Ответ db:schema:dump
.
У меня есть приложение, написанное на PHP/MySQL (symfony, если быть конкретным), что я (потенциально) хотел бы переписать в Rails. Я знаю, как создавать строительные леса для таблиц, которые еще не существуют, но как мне получить Rails для чтения моей существующей структуры таблиц и создания оснований на основе этого?
Обновление: оказалось, что я могу запустить следующую команду, чтобы получить Rails для создания моделей для меня:
rails generate scaffold Bank --no-migration
Но это не дает мне формы. Я бы предпочел что-то, что дает мне формы.
Ответ db:schema:dump
.
Самый простой путь - притвориться, что вы пишете новое приложение с аналогичной схемой базы данных - тогда вы можете создавать свои модели и миграции со старой схемой, но не ограничиваться ими. На более позднем этапе вы можете создать миграцию базы данных script, чтобы скопировать все старые данные в новую схему.
Я делаю это прямо сейчас. Преимущество такого подхода состоит в том, что вы можете использовать все инструменты и методы быстрого развития, предоставляемые Rails (включая строительные леса), без замедления, пытаясь модифицировать ту же схему.
Однако, если вы решите, что вам не нравится этот подход, и вам нужно сопоставить свои новые модели с существующими таблицами, существует множество параметров конфигурации, предоставляемых активной записью, где вы можете переопределить соглашение по конфигурации именования шаблонов и имен моделей карт для имен таблиц, заданных полей с именованием ID и т.д. Например:
class Mammals < ActiveRecord::Base
set_table_name "tbl_Squirrels"
set_primary_key :squirrel_id
end
Это поможет Rails попытаться прочитать вашу существующую таблицу, но успех будет зависеть от того, насколько хорошо существующие структуры таблиц соответствуют соглашениям Rails. Возможно, вам придется предоставить больше информации о конфигурации, чтобы заставить ее работать, и даже тогда она может не работать.
Наконец, стоит подумать об использовании DataMapper, который, как мне кажется, больше подходит для существующих баз данных в буфере, чем ActiveRecord, потому что он позволяет отображать все, но, конечно, вам нужно будет изучить этот API, если вы еще этого не знаете.