2012-03-06 15 views
2

は基本的に私はauthenticate_userActionController :: RoutingError(クラスのための未定義のメソッド `before_filter」):エラー

class UsersInitializeController < ApplicationController 
    before_filter :authenticate_user! 

    def create 
    render true 
    end 
end 

UsersInitializeControllerクラスを持っています!アプリケーションコントローラに見つかりました

class ApplicationController < ActionController::Base 
    # protect_from_forgery 

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

end 

私のアプリケーションが起動すると、それはPOST要求をUsersInitializeControllerに送信します。 before_filterが設定されているので、authenticate_userを呼び出します!最初。しかし、私が得たエラーはbefore_filterは未定義のメソッドだと言っています。

私の知るところでは、before_filterはActionControllerに存在し、以来、UsersInitializeContoller < ApplicationController < ActionControllerから、このエラーは発生しません。以前誰かがこの問題に遭遇しましたか?

例外スタック(要求された通り)

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 

###問題が

###解決

未使用Devise宝石はどうにかして合併症を引き起こします。それを削除して完了しました。

+1

例外スタック全体を投稿できますか?タイトルで使用したエラーを見ると、問題はあなたのauthenticate_userメソッドではないと思います。これはルーティングエラーです。未定義のメソッドはbefore_filterです。 –

+0

私は要望どおりに編集しました! –

+1

非常に奇妙です。これは、Railsがロードされる前にbefore_filterメソッドが呼び出されていることを示しています。 before_filterをアプリケーションコントローラに移動して同じアクションを実行するとどうなりますか? –

答えて

0

投稿したコードは、私のRails 3.2.2アプリでうまく動作します。

おそらくソースファイルに問題があります(つまり、別の隠しバイトがどこかにあります)。

あなたはこの解決するためのステップバイステップのアプローチを試みることができる:

  1. 新しいUsersControllerを追加し、resources :users次のコードでindexアクションを追加

  2. routes.rbに追加します。

    def index 
        render :text => "Hello there" 
    end 
    
  3. http://localhost:3000にアクセスすると、「こんにちは」という文字が表示されます。

  4. before_filterを追加して、フィルタが実行されていることを確認します。フィルタ法
+0

役立つテキストですが、コメントとしての役目を果たしました。 "私はあなたの問題を再現できません"答えではありません。 –

1

の先頭にlogger.warn('In the Filter')は「やる含まれる」内before_filterを追加ブロック:

included do 
    before_filter :authenticate_user! 
end 

更新: はちょうどあなたがすでにそれを解決気づきました。しかし私は同じ問題を抱えていて、私の場合は上記の解決策が解決しました。だから、他の人を助けるかもしれないので、ここでコメントを残しておきます

関連する問題