Используете фильтр до или оставаетесь в контроллере? - PullRequest
0 голосов
/ 22 марта 2012

в действиях моего контроллера, у меня почти всегда есть разные проверки, которые устанавливают ошибки флэш-памяти и перенаправление, как:

def create
    flash[:error] = I18n.t('error.no_resources') and redirect_to research_center_url and return if not resource_report[:has_resources]

    flash[:error] = I18n.t('error.no_deps') and redirect_to research_center_url and return if not research.fulfil_requirements?(active_city)
    ...
end

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

Однако я не могу поставить эти проверки в мои модели, так как они содержат информацию, не связанную с моделью, которую я не могу получить в обычном режиме. Поэтому мой вопрос заключается в том, как вы проверяете свои контроллеры на наличие ошибок, связанных с обычными приложениями, которые не являются исключениями и должны быть возвращены пользователю? Вы делаете проверки в контроллере, как я делаю здесь, с помощью обратных вызовов модели или другим способом?

1 Ответ

1 голос
/ 22 марта 2012

DRY Самый лучший способ использовать before_filter для многих, но не для всех файлов вашего контроллера - это использовать before_filter и подкласс ApplicationController.

Это позволяет вам иметь несколько файлов контроллера, которые автоматически совместно используют один и тот же набор before_filters

В этом примере я вызываю подкласс FrontController.Вы можете использовать любое имя.

например

class FrontController < ApplicationController
# Used for all "frontend" controllers which have the same checks. 

  before_filter :standard_checks
  # standard_checks will be a before filter for all controllers that
  # inherit from this controller class
end 

затем

class SomeController < FrontController 

  def create 
    ....
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...