我使用设计,我需要将用户从if seller_disabled_paypal_permissions != nil
application_controller.rb
我在application_controller.rb上有这段代码
class ApplicationController < ActionController::Base
before_filter :bad_sellers
#more code
.
.
.
private
def bad_sellers
if user_signed_in?
redirect_to requirements_to_sell_user_path, :alert => t('.error') if current_user.seller_disabled_paypal_permissions != nil
return false
end
end
end
但我得到错误:
错误310(net :: ERR_TOO_MANY_REDIRECTS):重定向过多。
我该怎么做?
答案 0 :(得分:0)
private
def bad_sellers
if user_signed_in? && !(current_user.seller_disabled_paypal_permissions.nil?)
redirect_to root_path, :alert => t('.error')
end
end
我从未明确地从before_fiter
返回任何值,所以这是我的第一次猜测。
您的问题是您已在ApplicationController
上创建了此行为,并且我认为您的根路径也是一个继承自ApplicationController
的控制器,因此它将您置于无限重定向循环中。 / p>
你需要这样的东西:
before_filter :bad_sellers, :except => [:whatever_your_root_path_action_is]
答案 1 :(得分:0)
当您有条件重定向时,您可能希望使用return
,因此rails不会看到任何其他重定向(不确定如何更好地重定向)。
根据你的例子:
def bad_sellers
if user_signed_in?
if !current_user.seller_disabled_paypal_permissions.nil?
return redirect_to root_path, :alert => t('.error')
end
end
end
答案 2 :(得分:0)
看起来它可能是递归的。 root_path还会在过滤之前调用它吗?在这种情况下,您可能希望找到一种不打电话的方法。查看skip_before_filter
此外,您不需要返回虚假的内容。
答案 3 :(得分:0)
解决问题的方法:
在applicatio_controller.rb
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :bad_sellers
#code here
#code here
def bad_sellers
if user_signed_in? && !(current_user.seller_disabled_paypal_permissions.nil?)
redirect_to requirements_to_sell_user_path(current_user), :alert => t('.error')
end
end
end
在users_controllers.rb
上{users_controllers
是application_controller
)的孩子
class UsersController < ApplicationController
skip_before_filter :bad_sellers, :only => [:requirements_to_sell] #parent filter on application_controller.rb
def requirements_to_sell
#more code
#more code
end
end