Я не думаю, что модуль - это то, что требуется здесь, модули требуются для общего поведения в небольшом подмножестве ваших классов.
Я думаю, что здесь требуется понимание наследования ApplicationController, а также макетов
так, например, мой макет может выглядеть так:
<html>
<head><title>Foo</title></head>
<body>
<%= render :partial => (current_user ? "/shared/user_widget_bar" : "/shared/login_bar") %>
<%= yield %>
</body>
</html>
Любой код, который я хочу использовать для этого, будет помещен в мой ApplicationController, поскольку он будет использоваться большинством моего приложения:
before_filter :generate_user_widget
def generate_user_widget
if current_user
@avatar = ...
@unread_messages = ...
end
end
Я понимаю, что, возможно, было бы чище, если бы он принадлежал к отдельному контроллеру, НО, если честно, если код не огромен, это не имеет значения и даже может быть помещен в модуль, который затем включается ActionController. Однако он должен быть внутри ApplicationController, если вы рассматриваете его область действия.
Если есть больше связанных страниц, скажем, например, у вас есть приложение Rails, которое управляет несколькими сайтами, и вы хотите совместно использовать поведение для определенного сайта, попробуйте создать родительский контроллер, у которого нет действий и только частные методы, любые контроллеры, которые необходимость иметь доступ к этим методам может наследовать от него. Таким образом, вы можете применять фильтры до всех контроллеров, которые наследуют его, избавляя вас от боли, когда вы забыли добавить один в ваши не родительские контроллеры.
например:
class SiteA::SiteAParentController < ApplicationController
before_filter :generate_user_widget
...
end
class SiteA::ProductController < SiteA::SiteAParentController
def index
...
end
end