Как правильно организовать наследование контроллеров в Ruby on Rails?
встречал в некоторых проектах на Rails наследование стандартного CRUD описанного в ApplicationController, сейчас это делает и scaffold-генератор. Поверхностное гугление не дало конкретного результата. Собственно непонятные для меня вопросы: каким образом определяется ресурс, роутинг и выбор вьюх, для разных ресурсов. Подробных объяснений не жду, но, если есть у кого под рукой, кинтесь ссылкой на объяснение и реализацию, можно на английском. Спасибо заранее.
нет, наверно я не правильно изясняюсь. Я хочу, в целях самообразования на учебном проекте, описать CRUD только в AplicationController. Остальные контроллеры, которые по умолчанию наследуются от него, наследуют и его методы, но как в таком случае быть с роутингом и выбором вьюх, + в методах будут использоваться переменные например:
def index
@users=User.all
end
если описывать это в ApplicationController, то как указать что для каждого отдельного ресурса необходимо менять имя переменной и имя модели? У меня есть смутное подозрение что подобраться к этому можно через resource, но не знаю как. Опять же описывать однотипный CRUD во всех контроллерах, как я понимаю, не имеет смысла.
Олег Кулаков: В ApplicationController в 99.9% случаев описываются вспомогательные методы, которые нужны в любом дочернем контроллере, логика которых остаётся неизменной и не зависит от запрашиваемого ресурса.
Пример:
"def current_user" - описывает логику идентификации текущего пользователя.
А так, CRUD для каждого ресурса идёт свой. Во всяком случае, не стоит заниматься преждевременной оптимизацией, даже если кажется, что круд везде однотипный. Как правило, это только так кажется. Но, даже если это так и окажется, в самом-самом конце, можно будет всё это дело вынести и оформить в красивый модуль, который заинклюдить во все эти контроллеры.
Dmitri Sinitsa: не нужно изобретать велосипед, есть гем https://github.com/activeadmin/inherited_resources но сам все делает. А если нужно что-то нестандартное то всегда можно определенные методы перенеследовать в конкретных контроллерах или даже использовать super.