रेल v2.1 का उपयोग करके, मान लें कि आपके पास एक नियंत्रक के लिए एक क्रिया है जो एक से अधिक स्थानों से सुलभ है। उदाहरण के लिए, रेल ऐप के भीतर, आपके पास दो अलग-अलग विचारों से उपयोगकर्ता को संपादित करने का एक लिंक है, एक उपयोगकर्ता इंडेक्स व्यू पर, और दूसरा एक अन्य दृश्य से (प्रत्येक पृष्ठ पर एनएवी बार से कहें)।सशर्त रीडायरेक्ट के लिए सबसे अच्छा तरीका?
मुझे आश्चर्य है कि उपयोगकर्ता को उस लिंक के आधार पर सही स्थान पर रीडायरेक्ट करने का सबसे अच्छा तरीका क्या है।
उदाहरण 1: उदाहरण के लिए:
- सूची सभी उपयोगकर्ताओं की सूची
- उपयोगकर्ता क्लिक करता है फार्म पर "सहेजें" में एक उपयोगकर्ता पर
- क्लिक करें "संपादित करें", नियंत्रक वापस 1 पर रीडायरेक्ट ।
उदाहरण 2:
- उपयोगकर्ता cou एलडी आवेदन के भीतर किसी भी पेज पर हो, एनएवी बार वर्तमान उपयोगकर्ता को संपादित करने के लिए एक लिंक दिखाता है
- उपयोगकर्ता
- संपादित करने के लिए लिंक पर क्लिक करता है उपयोगकर्ता उपयोगकर्ता पर "सेव" पर क्लिक करता है, नियंत्रक जो भी पेज पर रीडायरेक्ट करता है वे तब थे जब उपयोगकर्ता ने नेविगेशन बार में "संपादन" लिंक पर क्लिक किया था।
मैं इसे द्वारा पूर्व में की गई देखा है:
- मूल नियंत्रक/कार्रवाई, जिसमें लिंक दिखाई देता है के साथ मूल संपादित करें लिंक पर एक पैरामीटर लगाकर। इसे और अधिक DRY बनाने के लिए, आप एक सहायक में @ controller.controller_name और @ controller.action_name का उपयोग कर सकते हैं।
- नियंत्रक पैरामीटर को सत्र चर में सहेजता है।
- एक बार नियंत्रक ने रिकॉर्ड सहेजा है, यह सत्र चर पर रीडायरेक्ट करता है।
जो मुझे विशेष रूप से इस समाधान के बारे में पसंद नहीं है, वह विचारों में प्रत्येक लागू लिंक पर पैरामीटर जोड़ने की आवश्यकता है। मैं सोच रहा हूं कि यह सब नियंत्रक में बनाने का कोई तरीका है या नहीं।
एक बेहतर तरीका है मैं सोच रहा था था:
- प्लेस रेफरर को बचाने के लिए "संपादित करें" कार्रवाई पर एक before_filter सत्र में (? पर्याप्त इस विश्वसनीय है)।
- जब "अपडेट" मारा जाता है, तो नियंत्रक सत्र चर पर रीडायरेक्ट करेगा और फिर सत्र चर को हटा देगा।
ऐसा करने के सर्वोत्तम तरीके पर कोई विचार?
अच्छे विचार, आपने मुझे एक अलग समस्या के बारे में सोचने में मदद की जो मैं देख रहा था। धन्यवाद! –
मुझे मिल गया है, लेकिन सत्र चर आवश्यक हो सकता है क्योंकि इसे फॉर्म सत्यापन त्रुटियों में लगातार जारी रखने की आवश्यकता है। आपका उत्तर इस के लिए कैसे पूरा करता है? पहले_फिल्टर बेहतर DRY-ness देता है क्योंकि इस व्यवहार को नियंत्रक में कई कार्रवाइयों में होना आवश्यक है। –
यदि आपको किसी अन्य अनुरोध के लिए फ़्लैश में सहेजी गई कुछ चीज़ों को जारी रखने की आवश्यकता है (उदाहरण के लिए, इसे एक त्रुटि सुधार चरण से पहले प्राप्त करने के लिए) तो आप या तो स्पष्ट रूप से इसे जारी रखना चुन सकते हैं ('फ़्लैश [: foo] = फ़्लैश [: foo]') या, यदि यह आपको समग्र रूप से कम दर्द का कारण बनता है, तो सत्र का उपयोग करें और इसे पूरा होने पर स्पष्ट रूप से साफ़ करें। –