ActionController :: RoutingError (неопределенный метод before_filter для класса): ошибка - PullRequest
2 голосов
/ 06 марта 2012

В основном у меня есть класс UsersInitializeController

class UsersInitializeController < ApplicationController
  before_filter :authenticate_user!

  def create
    render true
  end
end

authenticate_user! находится в контроллере приложений

class ApplicationController < ActionController::Base
  # protect_from_forgery

  def authenticate_user!
    @current_user = User.find_by_token params[:auth_token]
    if !@current_user
      @current_user = User.create :token => params[:auth_token]
    end
  end

end

Когда мое приложение запускается, оно отправляет запрос POST в UsersInitializeController. Так как before_filter установлен, он будет вызывать authenticate_user! первый. Однако ошибка, которую я получил, говорит, что before_filter - неопределенный метод.

Насколько мне известно, before_filter существует в ActionController, и, поскольку UsersInitializeContoller

Стек исключений (по запросу)

Started POST "/users_initialize.json" for 127.0.0.1 at 2012-03-06 00:32:50 -0800

ActionController::RoutingError (undefined method `before_filter' for UsersInitializeController:Class):
app/controllers/users_initialize_controller.rb:3:in `<class:UsersInitializeController>'
app/controllers/users_initialize_controller.rb:1:in `<top (required)>'

файл Routes.rb (по запросу)

MyApplication::Application.routes.draw do
 resources :users_initialize
 match 'info/required_client_version' => 'info#required_client_version'
end

### Решена проблема ###

Неиспользованный Камень Обработки, каким-то образом вызывающий осложнение. Убрал его и сделал.

Ответы [ 2 ]

1 голос
/ 28 января 2016

добавить before_filter в блоке "включенного до":

included do
    before_filter :authenticate_user!
end

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

0 голосов
/ 07 марта 2012

Невозможно воспроизвести, код, который вы разместили, прекрасно работает в моем приложении Rails 3.2.2.

Возможно, что-то не так с вашим исходным файлом (то есть, где-то есть дополнительные скрытые байты).

Вы можете попробовать пошаговый подход для решения этой проблемы:

  1. добавить новый UsersController и добавить resources :users к routes.rb
  2. добавитьindex действие со следующим кодом:

    def index 
        render :text => "Hello there"
    end
    
  3. Когда вы посещаете http://localhost:3000, вы должны увидеть текст "Hello there"

  4. Addbefore_filter и убедитесь, что фильтр выполняется, добавив, например, logger.warn( 'In the Filter' ) в начало метода фильтра
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...