должен ли класс данных, не относящийся к базе данных, мне нужен быть создан как модель Rails 3 или просто базовый класс в области /lib?

должен ли класс данных, не относящийся к базе данных, мне нужен быть создан как «модель» Rails 3 или просто базовый класс в области /lib?

Я хочу создать несколько классов для представления вычисляемых объектов предметной области. Таким образом, поля не будут ссылаться на таблицу/столбец базы данных. В классе также будут методы, работающие с данными.

Вопрос. Должны ли при создании этих классов быть обычными классами Ruby, которые я помещаю в область /lib? Или я должен/могу ли я использовать для этого модели рельсов (и генерировать с помощью «модели рельсов g...»)?


person Greg    schedule 24.02.2012    source источник


Ответы (3)


Модели без таблиц, вероятно, следует хранить в app/models. У меня есть несколько, которые обращаются к API. ActiveModel в Rails может помочь реализовать некоторые полезные функции Active Record.

person ScottJShea    schedule 24.02.2012

Интересный вопрос. Несколько недель назад у меня был тот же вопрос.

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

В другом случае, когда я использую определенные наборы API для веб-приложения и мобильного приложения, я думаю сделать код, который взаимодействует с API, в драгоценный камень. Здесь следует отметить, что набор API также является частью моей системы и будет использоваться только моими приложениями.

person Josnidhin    schedule 24.02.2012

Классы, которые не сопоставляются с таблицами базы данных, могут по-прежнему находиться внутри приложений/моделей. Вместо того, чтобы расширять свой класс от ActiveRecord::Base, вы можете просто объявить свой класс без каких-либо расширений (или ваших собственных расширений).

Модель способностей CanCan является хорошим примером этого. Он находится в app/models/, но не расширяет ActiveRecord::Base. Дополнительную информацию о модели способностей CanCan можно найти здесь: https://github.com/ryanb/cancan/wiki/Defining-Abilities

Также учтите, что код в lib/ по умолчанию не будет перезагружаться в среде разработки.

person Ben Simpson    schedule 24.02.2012