Ruby on Rails: модели, миграции и обзор

Недавно я начал использовать Ruby on Rails после того, как ранее использовал Django для веб-разработки. Мне очень нравится акцент на миграциях (о чем в Django думают позже), но меня немного беспокоит следующее:

  • в Django, используя такую ​​библиотеку, как South, миграции автоматически генерируются на основе изменений, которые вы вносите в модели. Итак, изучения одного файла или каталога достаточно, чтобы увидеть текущее определение всех ваших моделей.
  • в Rails, AFAIU, app / models / *. rb содержат только методы этих моделей; поля разбросаны по всем db / migrations.

Я полагаю, что можно дисциплинированно присваивать имена файлам миграции, и поэтому можно найти все миграции, относящиеся к данной модели, но все же, как только вы дойдете, скажем, до m моделей с n миграциями в каждой, это очень много, чтобы отслеживать .

Должен быть способ проверить текущее состояние конкретной модели - как полей, так и методов - без утомительной работы; мог бы меня просветить более опытный разработчик RoR?


person michel-slm    schedule 29.10.2012    source источник


Ответы (2)


У вас есть файл db/schema.rb, в котором выражены все поля каждой модели (в форме одной большой миграции).

Разделение между данными (полями) и поведением (методами) является преднамеренным, и его можно переопределить с помощью библиотек, которые аннотируют модели копией последней применимой схемы в заголовке комментария.

person rewritten    schedule 29.10.2012
comment
Однако это увеличивает затраты на обслуживание и не добавляет реальной выгоды. - person sevenseacat; 29.10.2012
comment
Отлично, спасибо. Я знал, что это должно быть где-то, мне не приходило в голову, что это прямо у меня на глазах. Я нормально отношусь к тому, что методы хранятся отдельно. - person michel-slm; 29.10.2012
comment
@sevenseacat файл schema.rb не увеличивает затраты на обслуживание. Аннотации модели присутствуют, и поэтому по умолчанию они не добавляются (также из-за СУХОЙ) - person rewritten; 29.10.2012
comment
Вот что я имел в виду, аннотации модели добавляют накладные расходы :) - person sevenseacat; 29.10.2012

Если вы посмотрите на свои файлы моделей, вы заметите, что они не содержат ссылок на их свойства - например, у вашего пользователя может быть электронная почта, но в вашем User.rb его нет и следа. Это потому, что он находится в schema.rb.

Schema.rb - это представление вашей базы данных, сгенерированное рельсами из вашей базы данных при запуске rake db: migrate. Хотя это еще не конец света, если вы его удалите, запуск ваших миграций должен (теоретически) привести к schema.rb, который у вас есть. Однако миграции - это хрупкая вещь (например, вы могли добавить новые правила проверки, поскольку миграция была изначально написана), поэтому вам нужно schema.rb проверять в системе контроля версий.

Schema.rb можно загрузить в пустую базу данных, запустив

rake db:schema:load
person Dipak Panchal    schedule 29.10.2012