rails - корневая модель или модель приложения - PullRequest
5 голосов
/ 25 июля 2010

Я просто осматривал рельсы и заметил, что есть контроллер приложения, но нет модели приложения.

Нет ли корневой модели в рельсах?если нет, то куда вы помещаете фрагмент кода, который должен быть в каждой модели.

Спасибо, Алекс

Ответы [ 3 ]

14 голосов
/ 25 июля 2010

Ничто не говорит о том, что ваши контроллеры должны иметь подкласс ApplicationController, но обычно это стандарт, потому что подавляющее большинство приложений rails используют возможности layout (которые могут варьироваться на каждом контроллере), поэтому вместо форсирования редких без разметки от выключения разметки (layout nil или layout false) для каждого контроллера они создают «абстрактный» вариант, который позволяет легко включать и выключать функции контроллера для всего приложения.

Теперь для моделей вы можете создать ApplicationModel для всех ваших моделей для подкласса, но есть две вещи, о которых стоит подумать:

  1. ActiveRecord обычно обнаруживает, когда вы создаете подкласс уже подкласса ActiveRecord::Base, и использует его для включения STI (наследование одной таблицы).
  2. ApplicationModel будет реальной моделью, которая, как ожидается, будет иметь таблицу в вашей базе данных. Это может привести к проблемам в будущем.

Чтобы исправить эти две проблемы, вы должны установить для abstract_class значение true для правильной работы ActiveRecord.

class ApplicationModel < ActiveRecord::Base
  self.abstract_class = true
end

В отличие от абстрактного ActionController, abstract_class должен установить в значение true, что означает, что разработчик должен знать, что он не может удалить эту строку из ApplicationModel. С ApplicationController вы можете делать практически все, что захотите.

2 голосов
/ 25 июля 2010

Большинство моделей в рельсах наследуются от ActiveRecord :: Base, которая имеет все обычные методы получения и установки, а также методы сопоставления, проверки и поддержки.

Вы можете расширить ActiveRecord :: Base в файле в каталоге lib (или в любом месте пути загрузки рельсов), и любые модели, которые являются активными моделями записей, будут иметь доступный метод (ы).Модули также являются хорошим способом обмена кодом между многими моделями.

0 голосов
/ 11 июля 2012

Я думаю, что помню несколько лет назад, на самом деле по умолчанию существовала ann AppModel.Это правда или я все перепутал (я не работал с Rails несколько лет до сих пор)?

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