rails 3 - код, общий для нескольких контроллеров - где его поставить? - PullRequest
9 голосов
/ 14 августа 2011

У меня есть фрагмент кода, который необходим в 2 моих контроллерах, но не во всех.Куда относится этот метод?Я читал о помощниках, но, похоже, они предназначены для кода, связанного с представлением.Кто-то предложил папку lib, но она кажется «слишком далекой» от логики контроллера, мне она не нужна в представлениях или моделях.Кто-нибудь сталкивался с такой проблемой?

1 Ответ

11 голосов
/ 14 августа 2011

Существует три варианта, самый простой (хотя и самый нечистый) - это контроллер приложений.Две другие опции - это общий родительский контроллер

class FooController < FooBarParentController
   # code here  
end

class BarController < FooBarParentController
   # code here  
end

Использование зависит от того, насколько связаны эти контроллеры.

Окончательное решение - это модуль

module FooBarModule
  extend ActiveSupport::Concern

  included do
    # class level code
    # before_filter ....
  end

  module ClassMethods
    # all class methods here
  end

  # instance methods here
end

Этогде требуется общий код для нескольких специальных контроллеров или если вы уже используете наследование, указанное выше, и этот код не совсем вписывается в это подмножество (таким образом, пытаясь эмулировать множественное наследование).

...