Где найти методы, используемые несколькими контроллерами Rails и ограничивающие доступ к базовому контроллеру - PullRequest
3 голосов
/ 13 января 2011

У меня есть два контроллера (скажем, ArticlesController и PostsController), которые используют около 5 одинаковых методов.Это только два контроллера, которые используют 5 методов, поэтому они не чувствуют, что должны находиться в ApplicationController.В настоящее время я создал базовый контроллер (скажем, ContentController), а затем существующие два контроллера наследуются от этой базы.

Мой вопрос - это лучший подход для уменьшения дублирования?Как я могу гарантировать, что эти методы доступны только контроллеры, которые наследуются от базы?В приведенном выше примере я не хочу, чтобы к ContentController обращались напрямую.

Спасибо!

1 Ответ

5 голосов
/ 13 января 2011

Я думаю, что наличие общего предка, от которого наследуются ArticlesController и PostsController, вполне приемлемо.Вот для чего наследование, не так ли?Если вы не хотите, чтобы действия отображались непосредственно из ContentController, просто убедитесь, что нет маршрутов к ContentController.

Еще один способ сделать это - создать модуль для этих функций и включить этот модуль по мере необходимости.Допустим, вы хотите вызвать модуль «Мои функции»:

/ lib / my_functions.rb:

module MyFunctions
  def function1
    ...
  end

  def function2
    ...
  end

  ...
end

Тогда везде, где вам нужны эти функции, просто включите этот модуль:

class PostsController < ActionController::Base
  include MyFunctions
  ...
end

class ArticlesController < ActionController::Base
  include MyFunctions
  ...
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...