私は現在、2つのコントローラーを持つRails3.2アプリケーションに取り組んでいます。1つはキャンペーンで、もう1つは投稿です。どちらもbefore_filterを持っています。以下のコントローラーとルートをご覧ください。
キャンペーンコントローラー:
class CampaignsController < ApplicationController
before_filter :authenticate_user!, except: [:show, :landing]
投稿コントローラー:
class PostsController < ApplicationController
before_filter :check_sign_in, :except => [:index]
ルート:
resources :campaigns do
resources :posts
end
キャンペーンコントローラーに投稿コントローラーをネストする前は、投稿を表示するためだけにユーザーがログインすることを望まないため、投稿コントローラーのbefore_filterは正常に機能していました。ネストした後、Postsコントローラーで:exceptブロックを渡した後でも、ユーザーをチェックしないようにbefore_filterがレンダリングされます。残りの投稿アクションのためにユーザーにログインしてもらいたいのですが。
:check_sign_inはアプリケーションコントローラーにあり、次のようになります。
protected
def check_sign_in
redirect_to "#{sign_in_url}?origin=#{CGI::escape(request.fullpath)}" unless user_signed_in?
end
Posts Indexアクションのbefore_filterをスキップするために複数のことを試みましたが、どれも機能していないようです。skip_before_filterとskip_filterも試しましたが、機能していません。それらは、すべての投稿アクションでbefore_filterをスキップするだけであり、exceptブロックを渡すと、before_filterを実装し、インデックスアクションでスキップしません。
このことを解決するための助けをいただければ幸いです