我对skip_before动作有一些问题:
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :require_login
before_action :inc_cookies
def inc_cookies
if cookies[:token] != nil
@name = cookies[:name]
@surname = cookies[:surname]
@user_roomate = cookies[:roomate]
end
end
def require_login
if cookies[:token] == nil
puts "No token"
redirect_to '/'
end
end
end
和我的另一个控制人员:
class UsersController < ApplicationController
skip_before_action :require_login, :except => [:landing, :connect, :create]
end
我不知道为什么,但是当我在根目录(来自UsersController的登陆操作)时,Rails会尝试传入require_login ... 我用这个过滤器误解了一些东西,或者我做错了什么?
感谢您的帮助!
答案 0 :(得分:38)
这对我来说听起来很正常 - 除非行动是:landing
,:connect
或:create
,否则您已经要求铁轨跳过您之前的操作,但听起来好像您想要相反。如果你希望这3个动作不执行require_login
那么你应该做
skip_before_action :require_login, :only => [:landing, :connect, :create]