/ / रेल पर रूबी, पुनर्निर्देशित अगर ब्राउज़र में वापस बटन मार रहा है - रूबी-ऑन-रेल, रीडायरेक्ट, पुनः लोड, बैक-बटन, खोज-प्रपत्र

रेल पर रूबी, पुनर्निर्देशित अगर ब्राउज़र में वापस बटन मार रहा है - रूबी-ऑन-रेल, रीडायरेक्ट, पुनः लोड, बैक-बटन, खोज-प्रपत्र

मेरे पास एक खोज है जो उपलब्ध प्रदर्शित करता हैकमरे बुक करने के लिए, अगर मैं एक कमरा बुक करता हूं और बाद में अपने ब्राउज़र में पीछे बटन दबाता हूं, तो खोज परिणाम अभी भी प्रदर्शित हैं। क्या पेज को फिर से लोड करना संभव है, जब मैं वापस मारा, ताकि उपयोगकर्ता को उपलब्ध कमरों को देखने के लिए फिर से सर्चबटन पर क्लिक करना पड़े? मैं परिणामों के बिना डिफ़ॉल्ट खोज करना चाहता हूं? मैंने पहले यह कोशिश की:

before_filter :set_cache_buster
def set_cache_buster
response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate"
response.headers["Pragma"] = "no-cache"
response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
end

लेकिन यह अभी भी खोज में अभी भी उपयोगकर्ता इनपुट पैरामैटर के साथ पृष्ठ को पुनः लोड करता है, इसलिए यह मूल रूप से लोड किए बिना, उसी पृष्ठ को दिखाता है, धन्यवाद

उत्तर:

जवाब के लिए 2 № 1

यदि आपकी फ़ॉर्म विधि "GET" है, तो पृष्ठ हमेशा होता हैउपलब्ध है जब आप वापस बटन मारा और क्वेरी तार सभी यूआरएल में हैं। कई मामलों में यह प्रभाव पसंद किया जाता है, उदाहरण के लिए आप Google खोज यूआरएल को बुकमार्क कर सकते हैं।

आप फ़ॉर्म विधि को "POST" के रूप में बदल सकते हैं, इसलिए पृष्ठ फिर से उपलब्ध नहीं होगा।

जोड़ना

इसे थोड़ी सावधानी से इस्तेमाल करें।कन्वेंशन में "जीईटी" का अर्थ डेटा प्राप्त करना है और "पोस्ट" का अर्थ कुछ डेटा जोड़ना है। एक खोज फ़ॉर्म डेटा प्राप्त करने के लिए बनाया गया है ताकि फ़ॉर्म विधि का सम्मेलन "GET" हो, यहाँ कुछ भी गलत नहीं है। इसलिए इसे तभी बदलें जब आपको वास्तव में इसकी आवश्यकता हो।

अधिक जोड़ें ओपी ने कहा कि वह "फार्म बदलने की विधि नहीं कर सकता है।"

ठीक है, यहाँ एक हैक है, यदि आप सर्च रिजल्ट चाहते हैं तो केवल परमल के साथ यूआरएल के बजाय केवल बटन पर क्लिक करें।

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

# JavaScript
$("#the_form button").on("submit", function() {
this.preventDefault();
this.parent.append("<input type="hidden" name="human_hit" value="yes" />");
this.parent.submit();
})

# Controller
def search
if params[:human_hit]
# Do search logic and deliver
else
redirect_to :back, alert: "You need to hit the button to search"
end
end

यह एक हैक है और सत्यापित नहीं है, विचार को चाल करने में सक्षम होना चाहिए।