我的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#index
和posts#show
,但我尝试的一切,它都不会跳过这些操作,并且我已重定向到日志它在我的其他控制器中工作。我通过路由到static_pages#home
并在static_pages控制器中使用render posts/index
将该操作定义为skip_before_action
来处理索引。在之前的尝试中,我尝试不将先前操作放在ApplicationController
中,只是在我需要时调用PostsController
和UsersController
中的before_action,但是PostsController
并非如此。这样做。我在PostsController
中为redirect_to编写了一个测试操作,并尝试在所有内容上调用before_action :test_action
,但它也不会这样做。我错过了什么?
答案 0 :(得分:0)
根据OOP,logged_in_user方法是私有,因此在PostsController中,skip_before_action找不到此方法。
答案 1 :(得分:0)
在Josh Brody看了我的git文件之后,我发现问题......向所有人道歉,但似乎我的IDE出现了问题。它没有正确保存我的帖子控制器。重新启动计算机,一切正常。我回去并将逻辑切换为使用before_action。哈,我每天浪费六个小时的时间撞到电脑上,认为这是我的代码。良好的学习经历。