2013-01-16 107 views
0

我使用的設計,我需要從重定向用戶if seller_disabled_paypal_permissions != nil特定頁面我application_controller.rb將用戶重定向到指定的頁面與軌道3

我有我的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

看看你的日誌,看到所有的重定向來了從。 – Swards

回答

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.rbusers_controllersapplication_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 
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的控制器,因此它將你置於無限重定向循環中。

你需要這樣的東西:

before_filter :bad_sellers, :except => [:whatever_your_root_path_action_is] 
+0

謝謝,如果我打電話給這個方法,代碼不起作用。我曾嘗試使用before_filter調用此方法,但出現上述錯誤。 – hyperrjas

0

當你有一個有條件的重定向,您可能需要使用return所以軌道沒有看到任何其他重定向(不知道如何把它比這更好的)。

按您的例子:

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 
+0

同樣的問題,我怎樣才能調用這個方法?謝謝 – hyperrjas

+0

我在編輯它之後嘗試了這種方法嗎?最後我拿出了額外的回報。否則我不確定會發生什麼。 before_filter正在射擊,對吧?也許把這個從你的私人街區 – cpow

+0

如果我重定向到「http://www.google.com」工作正常。我不明白爲什麼我可以重定向到外部頁面,但如果我嘗試在應用程序內部重定向,我得到錯誤! – hyperrjas

0

它看起來可能是遞歸的。 root_path是否也在過濾器之前調用它?在這種情況下,你會想找到一種不叫它的方法。看看skip_before_filter

此外,你不需要'返回false'。

+0

如果我運行'skip_before_filter',則不會調用'bad_sellers'方法。然後,用戶可以瀏覽應用程序。如果current_user.seller_disabled_pa​​ypal_permissions!= nil',我想將一個特定頁面重定向到用戶。謝謝! – hyperrjas

+0

我認爲你想在根頁面上過濾之前跳過。如果這是您重定向到的頁面,則無需在那裏檢查bad_sellers。 – Swards

+0

根頁面是一個例子,我需要重定向到其他頁面。我想強制用戶去'requirements_to_sell_user_path'。我修改了這個問題。謝謝 – hyperrjas

相關問題