2013-02-02 12 views
22

में अनुरोधकर्ता से नियंत्रक नाम प्राप्त करने का अच्छा तरीका मुझे पता है कि मैं रेल में पूर्ण अनुरोध यूआरएल प्राप्त करने के लिए request.referrer का उपयोग कर सकता हूं, लेकिन क्या अनुरोध से नियंत्रक का नाम प्राप्त करने का कोई तरीका है?रेल से

मैं देखने के लिए अगर http://myurl.com/profiles/2 का URL "प्रोफाइल"

मैं जानता हूँ कि मैं यह करने के लिए रेगुलर एक्सप्रेशन का उपयोग कर सकते शामिल है, लेकिन मैं अगर वहाँ एक बेहतर तरीका था सोच चाहते हैं।

+0

यह बिल्कुल एक सही दृष्टिकोण होना प्रतीत नहीं होता है। क्या होगा यदि कोई अन्य सर्वर रेफरर है? – Eru

+1

http: // localhost: 3000 ठीक परीक्षण पूर्ण धन्यवाद दोस्तों :) –

+0

कृपया @ tvalent2, सही उत्तर का चयन करें। उपरोक्त खुद से बात करते हैं। –

उत्तर

-2

नियंत्रक के अंदर, आपके पास विधि controller_name है जो आपको केवल नाम देता है। आपके मामले में, यह "प्रोफाइल" वापस करेगा। आप params[:controller] का भी उपयोग कर सकते हैं जो एक ही स्ट्रिंग देता है।

+15

क्या यह प्रश्न गलत तरीके से स्वीकार नहीं किया गया है? क्या वह नहीं जानना चाहता था कि रेफरर के क्रिया/नियंत्रक को विघटित करना है, न कि वर्तमान कार्रवाई? – GigaBass

82

ध्यान रखें कि request.referrer आपको वर्तमान से पहले अनुरोध का यूआरएल देता है। जैसा कि कहा गया है, यहाँ है कैसे आप नियंत्रक करने के लिए/actionn जानकारी request.referrer परिवर्तित कर सकते हैं:

Rails.application.routes.recognize_path(request.referrer) 

यह आप

{:controller => "x", :action => "y"} 
+1

जीनियस। धन्यवाद। – Abram

+4

'Rails.application.routes.recognize_path (request.referrer) [: नियंत्रक] 'सटीक होना चाहिए। – marcantonio

+2

धन्यवाद बहुत महोदय, आपने अपना समय बचाया। उत्तर में टीडीडी के लिए –

4

यहाँ की तरह कुछ देना चाहिए मेरी कोशिश है जो रेल 3 & 4. यह कोड के साथ काम करता है लॉगआउट पर एक पैरामीटर निकालता है और उपयोगकर्ता को अनुकूलित लॉगिन पेज पर रीडायरेक्ट करता है अन्यथा यह सामान्य लॉगिन पेज पर रीडायरेक्ट करता है। आप आसानी से :controller निकाल सकते हैं। नियंत्रक हिस्सा:

def logout 
    auth_logout_user 
    path = login_path 
    begin 
    refroute = Rails.application.routes.recognize_path(request.referer) 
    path = subscriber_path(refroute[:sub_id]) if refroute && refroute[:sub_id] 
    rescue ActionController::RoutingError 
    #ignore 
    end 
    redirect_to path 
end 

और परीक्षण उतने ही महत्वपूर्ण हैं:

test "logout to subscriber entry page" do 
    session[:uid] = users(:user1).id 
    @request.env['HTTP_REFERER'] = "http://host/s/client1/p/xyzabc" 
    get :logout 
    assert_redirected_to subscriber_path('client1') 
end 

test "logout other referer" do 
    session[:uid] = users(:user1).id 
    @request.env['HTTP_REFERER'] = "http://anyhost/path/other" 
    get :logout 
    assert_redirected_to login_path 
end 

test "logout with bad referer" do 
    session[:uid] = users(:user1).id 
    @request.env['HTTP_REFERER'] = "badhost/path/other" 
    get :logout 
    assert_redirected_to login_path 
end 
+0

woot woot! –

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

  • कोई संबंधित समस्या नहीं^_^