Расположение модели Rails - PullRequest
1 голос
/ 13 февраля 2011

Я работаю над учебником по Ruby on Rails и только что создал модель Comment с тремя свойствами.

rails generate model Comment commenter:string body:text post:references

Он сгенерировал класс ActiveRecord с post, но не commenter и body.

class Comment < ActiveRecord::Base
  belongs_to :post
end

Почему рельсы формально не определяют нереференсные свойства где-либо, кроме сценариев миграции БД?

Ответы [ 3 ]

2 голосов
/ 13 февраля 2011

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

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

1 голос
/ 13 февраля 2011

Короткий ответ на ваш вопрос - «нет». Даже миграция не является определенным местом для поиска, поскольку может быть много миграций, связанных с моделью.

Однако вы можете взглянуть на сгенерированный «db / schema.rb», который представляет собой совокупность всех миграций. Он содержит определение схемы всех моделей activerecord. Возможно, это ваш лучший выбор.

Кроме того, вы можете использовать плагин https://github.com/ctran/annotate_models, который вставляет комментарий в вашу модель, чтобы помочь вам отслеживать все атрибуты вашей модели.

1 голос
/ 13 февраля 2011

Почему рельсы формально не определяют нереференсные свойства где-либо, кроме сценариев переноса БД?

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

Если вы создадите репозиторий для комментариев с похожими параметрами, он также сгенерирует представления и будет использоватьатрибутов.Они не должны быть «определены» как таковые где-либо еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...