0

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):重定向太多。

我该怎么做?

4

4 回答 4

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

我从来没有明确地从 a 返回任何值,before_fiter所以这是我的第一个猜测。

您的问题是您已经创建了此行为ApplicationController,我打赌您的根路径也是一个继承自的控制器,ApplicationController因此它将您置于无限重定向循环中。

你需要类似的东西:

before_filter :bad_sellers, :except => [:whatever_your_root_path_action_is]
于 2013-01-16T19:19:56.197 回答
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
于 2013-01-16T19:23:06.770 回答
0

看起来它可能是递归的。root_path 是否也在过滤器之前调用它?在这种情况下,您会想找到一种不调用它的方法。调查skip_before_filter

此外,您不需要“返回 false”。

于 2013-01-16T19:57:09.517 回答
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

On 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
于 2013-01-17T16:09:29.110 回答