2012-01-02 7 views
0

Rails 3.0.10の奇妙な動作があります。Rails3フィルタがプロダクションでスキップされています

アプリ/コントローラ/ 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 

と、このコントローラ:

APP /このアプリケーション・コントローラを持ってcontrollers/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 

私の問題は、生産モードでこれを実行すると、require_userフィルタが呼び出されないということです。 開発モードでこれを試してみると動作します。

開発モードではクラスがリロードされていることを理解していますが、なぜrequire_userフィルタが呼び出されないのでしょうか?

編集:ACコントローラはAPIコントローラの前にあります。

+0

最初のアプリケーションコントローラはアプリケーションコントローラのようには見えませんが、少なくとも2番目のアプリケーションコントローラはアプリケーションコントローラのようには見えません。 –

+0

ミハル - 申し訳ありませんええ、私はそれを固定 - これによれば、悪いコピーを& – lzap

+0

を貼り付け、それが呼び出される必要がありますが、それはありません:http://rails.rubyonrails.org/classes/ActionController/Filters/ClassMethods.html – lzap

答えて

1

必要なファイルに問題があるか、ApiControllerが2回読み込まれているようです。一度、AcControllerの前に、もう一度、AcControllerがロードされた後。これにより、find_poolフィルタはrequire_userより前に評価されます。 ApiControllerは、AcControllerの後に続きます。

require "api_controller"がどこかに存在するため、問題が発生する可能性があります。これはRailsで処理する必要があり、明示的に指定する必要はありません。そのような行がある場合は、それを削除すると役立つ可能性があります。

+0

が必要と削除ステートメント、タイ – lzap

1

通常、フィルタによって呼び出されるメソッドはパブリックではありません。コントローラのパブリックメソッドはアクションとして扱われます。 private方法をrequire_userにしましたか?

関連する問題