2013-10-07 2 views
3

У меня есть пять контроллеров, которые имеют общий код. Лучше ли им наследовать родительский контроллер или использовать проблемы? Например:Наследовать от родительского контроллера или использовать проблемы?

class PostsController < ApplicationController 
    before_action :authenticate, :set_project 
    layout 'projects' 
end 

class CommentsController < ApplicationController 
    before_action :authenticate, :set_project 
    layout 'projects' 
end 

# three other controllers, etc... 

Я мог позволить контроллеры наследовать от одного контроллера, который объявляет before_actions и layout, или я мог бы засунуть общий код в концерн.

Каковы критерии выбора одного или другого? Определено ли это?

ответ

4

Мое эмпирическое правило:

Если контроллеры одни и те же пространства имен в URL (например, /projects/... или /admin/...), чем я использую наследование от Projects::BaseController или Admin::BaseController.

Если они просто передают методы или декларации и не используют пространство имен, то я использую mixins.

И иногда я предпочитаю дублированный код. Потому что код на месте легче понять, чем mixin с бессмысленным именем. У вас есть хорошее имя для беспокойства, которое охватывает authenticationиlayout?

1

В большинстве случаев я использую mixins для добавления функций и наследования для настройки функций.

например: Если мне нужно переопределить current_user Я выбираю наследование. Если у меня есть только некоторые общие методы, я выбираю mixins.

Смежные вопросы