一个控制器没有响应before_action或skip_before_action

时间:2018-01-21 22:40:02

标签: ruby-on-rails

我的ApplicationController中有以下before_actions:

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  include SessionsHelper
  before_action :logged_in_user
  before_action :admin_user
  private

    # Confirms a logged-in user.
    def logged_in_user
      unless logged_in?
        store_location
        flash[:danger] = "Please log in."
        redirect_to login_url
      end
    end

    # Confirms an admin user.
    def admin_user
      redirect_to(root_url) unless current_user.admin?
    end
end

我的PostsController中有skip_before_actions:

class PostsController < ApplicationController
  skip_before_action :logged_in_user,    except: [:new, :edit, :update, :destroy]
  skip_before_action :admin_user,     except: [:new, :edit, :update, :destroy]
  before_action :find_post,      only: [:edit, :update, :show, :delete]

find_post动作完美无缺,该方法位于该控制器中。我希望能够在不登录或成为管理员的情况下访问posts#indexposts#show,但我尝试的一切,它都不会跳过这些操作,并且我已重定向到日志它在我的其他控制器中工作。我通过路由到static_pages#home并在static_pages控制器中使用render posts/index将该操作定义为skip_before_action来处理索引。在之前的尝试中,我尝试不将先前操作放在ApplicationController中,只是在我需要时调用PostsControllerUsersController中的before_action,但是PostsController并非如此。这样做。我在PostsController中为redirect_to编写了一个测试操作,并尝试在所有内容上调用before_action :test_action,但它也不会这样做。我错过了什么?

2 个答案:

答案 0 :(得分:0)

根据OOP,logged_in_user方法是私有,因此在PostsController中,skip_before_action找不到此方法。

答案 1 :(得分:0)

在Josh Brody看了我的git文件之后,我发现问题......向所有人道歉,但似乎我的IDE出现了问题。它没有正确保存我的帖子控制器。重新启动计算机,一切正常。我回去并将逻辑切换为使用before_action。哈,我每天浪费六个小时的时间撞到电脑上,认为这是我的代码。良好的学习经历。