2014-10-19 9 views
14

रूबी 2.0.2, रेल 4.0.3, जादुई 0.8.5क्या रेलवे में यह जांचना संभव है कि रीडायरेक्ट या रेंडर जारी किया गया हो या नहीं?

मैंने अपने कोड में एक रीडायरेक्ट जारी करने का प्रयास किया, केवल एक त्रुटि संदेश प्राप्त करने के लिए जो एक रीडायरेक्ट या रेंडर जारी किया गया था। अगर ऐसा है, तो मुझे वापस लौटने में खुशी होगी। हालांकि, अगर किसी अन्य कारण से विधि को बुलाया जाता है, तो मैं यह देखने के लिए जांचना चाहता हूं कि रीडायरेक्ट या रेंडर जारी किया गया था और यदि नहीं, तो इसे जारी करें। कोड जादूगर पर आधारित प्रमाणीकरण है।

आवेदन नियंत्रक में, मेरे पास है:

def not_authenticated 
    redirect_to login_url # , :alert => "First log in to view this page." 
    end 

यह current_user के लिए जाँच समाप्त होता है, इस प्रकार है:

def current_user 
    @current_user ||= @view.current_user unless @view.blank? 
    begin 
     @current_user ||= Associate.find(session[:user_id]) unless session[:user_id].blank? 
    rescue ActiveRecord::RecordNotFound => e 
     return 
    end 
    current_user = @current_user 
    end 

बचाव में, मैं या नहीं, एक निर्धारित करने के लिए करना चाहते हैं रीडायरेक्ट या रेंडर पहले ही हुआ था, ताकि अगर मैं नहीं कर सकता तो login_url को रीडायरेक्ट कर सकता हूं। इसका मतलब यह होगा कि, यह एक अलग विधि से कहा जाता है, जो यह है। धन्यवाद।

+0

क्या आपका लॉगिन पेज 'current_user' को कॉल कर रहा है? यदि हां, तो क्यों? – Substantial

+0

@ सबस्टेंटियल नंबर, यह नहीं है। ट्रेस ने जो कुछ भी शामिल है उसके अलावा मेरे किसी भी कोड को नहीं दिखाया। जादूगर current_user की जांच कर रहा था। यह एक क्षणिक स्थिति है और मैंने ट्रेस को नहीं बचाया है, इसलिए मेरे पास इससे अधिक नहीं है। –

उत्तर

29

आपको यह देखना होगा अपने नियंत्रक में performed? कॉल कर सकते हैं render या redirect_to पहले से ही बुलाया गया है:

performed?    # => false 
redirect_to(login_path) 
performed?    # => true 

रेल डॉक्स में performed? बारे में अधिक पढ़ें।

+0

वाह शांत! वही है जो मैं चाहता था! –

संबंधित मुद्दे

 संबंधित मुद्दे