Фильтр Rails3 пропускается в производство - PullRequest
0 голосов
/ 02 января 2012

У меня странное поведение Rails 3.0.10. Получил этот контроллер приложения:

приложение / контроллеры / application_controller.rb

require 'api/api_controller'

# rest not important

приложение / контроллеры / API / api_controller.rb

class Api::ApiController < ActionController::Base
   before_filter :require_user

  def require_user
    @user = User.find(xxx, yyy)
  end
end

и затем этот контроллер:

приложение / контроллеры / API / ac_controller.rb

class Api::AcController < Api::ApiController

  before_filter :find_pool, :only => [:add_pool, :remove_pool]

  def add_pool
    # some logic that needs @user to be set
  end

  def remove_pool
    # some logic that needs @user to be set
  end

  def find_pool
    # some logic here
  end

end

Моя проблема в том, что когда я запускаю это в режиме production , фильтр require_user НЕ вызывается. Когда я пытаюсь сделать это в режиме development , он работает.

Теперь я понимаю, что в режиме разработки классы перезагружаются, но вопрос в том, почему не вызывается фильтр require_user?

Редактировать: Обратите внимание, что контроллер переменного тока находится перед лексикографически перед контроллером API.

Ответы [ 2 ]

1 голос
/ 02 января 2012

Обычно методы, вызываемые фильтрами, НЕ должны быть открытыми.Открытые методы в контроллерах рассматриваются как действия.Вы пытались сделать метод require_user private?

1 голос
/ 02 января 2012

Похоже, что проблема с требуемыми файлами или ApiController загружается дважды.Один раз до AcController и еще один раз после загрузки AcController.Это может привести к тому, что фильтр find_pool будет оценен до require_user.ApiController - это также после AcController в лексическом порядке.

Проблема может быть вызвана тем, что require "api_controller" присутствует где-то - это должно быть обработано Rails и не должно подавляться явноПоэтому, если такая строка есть, ее удаление может помочь.

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