我目前正在开发一个 Rails 3.2 应用程序,其中有两个控制器。一个是活动,另一个是帖子。他们都有一个 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
在将 Posts Controller 嵌套到 Campaigns Controller 之前,Posts 控制器中的 before_filter 工作正常,因为我不希望用户登录后才能查看帖子。嵌套之后,即使在通过 Posts 控制器中的 :except 块不检查用户之后,也会呈现 before_filter。虽然我确实希望用户登录其余的 Posts 操作。
:check_sign_in 在应用程序控制器中,如下所示:
protected
def check_sign_in
redirect_to "#{sign_in_url}?origin=#{CGI::escape(request.fullpath)}" unless user_signed_in?
end
我尝试了多种方法来跳过帖子索引操作上的 before_filter,但它们似乎都不起作用。我也尝试过 skip_before_filter 和 skip_filter 但它们也不起作用。他们只是在所有帖子操作中跳过 before_filter ,如果我通过了 except 块,它会实现 before_filter 并且不要在索引操作中跳过它。
任何帮助解决这个问题将不胜感激