Ничто не говорит о том, что ваши контроллеры должны иметь подкласс ApplicationController
, но обычно это стандарт, потому что подавляющее большинство приложений rails используют возможности layout
(которые могут варьироваться на каждом контроллере), поэтому вместо форсирования редких без разметки от выключения разметки (layout nil
или layout false
) для каждого контроллера они создают «абстрактный» вариант, который позволяет легко включать и выключать функции контроллера для всего приложения.
Теперь для моделей вы можете создать ApplicationModel
для всех ваших моделей для подкласса, но есть две вещи, о которых стоит подумать:
- ActiveRecord обычно обнаруживает, когда вы создаете подкласс уже подкласса
ActiveRecord::Base
, и использует его для включения STI (наследование одной таблицы).
ApplicationModel
будет реальной моделью, которая, как ожидается, будет иметь таблицу в вашей базе данных. Это может привести к проблемам в будущем.
Чтобы исправить эти две проблемы, вы должны установить для abstract_class
значение true для правильной работы ActiveRecord.
class ApplicationModel < ActiveRecord::Base
self.abstract_class = true
end
В отличие от абстрактного ActionController, abstract_class
должен установить в значение true, что означает, что разработчик должен знать, что он не может удалить эту строку из ApplicationModel
. С ApplicationController
вы можете делать практически все, что захотите.