2009-10-21 8 views
8

यदि कोई उपयोगकर्ता मेरी रेल एप्लिकेशन पर लॉग इन विफल रहता है, मैं एक पासवर्ड रीसेट पृष्ठ के लिए उन्हें बात करने के लिए करना चाहते हैं:LINK_TO() में रेल फ़्लैश

flash[:notice] = "Login failed. If you have forgotten your password, you can #{link_to('reset it', reset_path)}" 

हालांकि, मैं एक नियंत्रक में LINK_TO उपयोग नहीं कर सकते । नियंत्रक मिश्रण और तर्क देखने के बिना ऐसा करने का सबसे अच्छा तरीका क्या है?

मेरा सबसे अच्छा अनुमान यह है कि फ़्लैश ऐसा करने के लिए गलत जगह है, लेकिन मैं किसी भी इनपुट की सराहना करता हूं।

उत्तर

9

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

यदि आप इसे फ़्लैश संदेश में करना चाहते हैं, तो आपको link_to के बजाय लिंक बनाने के लिए url_for का उपयोग करना चाहिए।

वैकल्पिक रूप से, आप अपने नियंत्रक में संदेश को हार्ड-कोडिंग के बजाय आंशिक प्रस्तुत कर सकते हैं।

flash[:error] = render_to_string(:partial => "shared/login_failed_message") 

# in shared/_login_failed_message.html.erb 
<%= "Login failed. If you have forgotten your password, you can #{link_to('reset it', reset_path)}" %> 
+0

धन्यवाद - आंशिक मैं वास्तव में क्या जरूरत है। – Grandpa

+1

मुझे लगता है कि यह काम नहीं करता है (रेल 3.1 में) क्योंकि सभी आउटपुट रेंडर होने से पहले बच निकले हैं। तो आपको कुछ मिलता है जैसे "लिस्टिंग < को एक href = "/टीम/1 " > डेविड टुइट की टीम </>" –

+2

बस इसमें .html_safe विधि जोड़ें और इसे काम करना चाहिए। – MarioRicalde

5
flash[:notice] = "Login failed. If you have forgotten your password, you can <a href='#{url_for(reset_path)}'>reset it</a>" 

सही है, LINK_TO एक दृश्य के सहायक है। हमें कृपया सकता है (http://www.railsexperiments.com/using-helpers-inside-controllers से उठाया) जा एक अधिक सामान्य इस सवाल का सर्वश्रेष्ठ उत्तर url_for

5

आज लिंक, ए ला के निर्माण के रास्ते

flash[:notice] = "Login failed. If you have forgotten your password, you can #{view_context.link_to('reset it', reset_path)}".html_safe