Подтвердить что ты не робот

Помещение Rails поверх существующей базы данных

У меня есть приложение, написанное на PHP/MySQL (symfony, если быть конкретным), что я (потенциально) хотел бы переписать в Rails. Я знаю, как создавать строительные леса для таблиц, которые еще не существуют, но как мне получить Rails для чтения моей существующей структуры таблиц и создания оснований на основе этого?

Обновление: оказалось, что я могу запустить следующую команду, чтобы получить Rails для создания моделей для меня:

rails generate scaffold Bank --no-migration

Но это не дает мне формы. Я бы предпочел что-то, что дает мне формы.

4b9b3361

Ответ 2

Самый простой путь - притвориться, что вы пишете новое приложение с аналогичной схемой базы данных - тогда вы можете создавать свои модели и миграции со старой схемой, но не ограничиваться ими. На более позднем этапе вы можете создать миграцию базы данных script, чтобы скопировать все старые данные в новую схему.

Я делаю это прямо сейчас. Преимущество такого подхода состоит в том, что вы можете использовать все инструменты и методы быстрого развития, предоставляемые Rails (включая строительные леса), без замедления, пытаясь модифицировать ту же схему.

Однако, если вы решите, что вам не нравится этот подход, и вам нужно сопоставить свои новые модели с существующими таблицами, существует множество параметров конфигурации, предоставляемых активной записью, где вы можете переопределить соглашение по конфигурации именования шаблонов и имен моделей карт для имен таблиц, заданных полей с именованием ID и т.д. Например:

class Mammals < ActiveRecord::Base
  set_table_name "tbl_Squirrels"
  set_primary_key :squirrel_id
end

Это поможет Rails попытаться прочитать вашу существующую таблицу, но успех будет зависеть от того, насколько хорошо существующие структуры таблиц соответствуют соглашениям Rails. Возможно, вам придется предоставить больше информации о конфигурации, чтобы заставить ее работать, и даже тогда она может не работать.

Наконец, стоит подумать об использовании DataMapper, который, как мне кажется, больше подходит для существующих баз данных в буфере, чем ActiveRecord, потому что он позволяет отображать все, но, конечно, вам нужно будет изучить этот API, если вы еще этого не знаете.