मुझे आज शाम यह बहुत ही अजीब समस्या हुई जब मैं "फ़िल्टर-पोस्ट-बाय-मल्टीपल-टैग" फीचर जैसा कुछ बना रहा था।
दृश्य टेम्पलेट में:
<%
tags = Tag.all
selected_tags ||= nil
%>
<ul>
<% tags.each do |tag| %>
<% logger.info("selected_tags size:"+ selected_tags.size.inspect) %>
<li><%= link_or_span(tag, selected_tags) %></li>
<% end %>
</ul>
टैग हेल्पर में:
module TagsHelper
def link_or_span(tag, selected_tags)
selected_tags.delete(tag)
link_to tag.title, tag
end
end
यह (लॉग में) आउटपुट करता है:
चयनित_टैग आकार:2
चयनित_टैग आकार:1
चयनित_टैग आकार:0
मैं क्या अपेक्षा करता हूं:
चयनित_टैग आकार:2
चयनित_टैग आकार:2
चयनित_टैग आकार:2
मुझे लगता है कि दृश्य टेम्पलेट में var "चयनित_टैग" लूप में हर बार अछूता होना चाहिए क्योंकि यह अलग-अलग दायरे में है, है ना?
ईएनवी:
- रूबी 1.9.2p180 (2011-02-18 संशोधन 30909) [x86_64-linux]
- रेल 3.1.0.rc4
2 जवाब
selected_tags.delete(tag)
इससे हटाएं
selected_tags.map {|t| tag.delete(t) }
क्योंकि मुझे लगता है कि आपका कोड बिना चयनित_टैग के सभी टैग दिखाएगा? यह सही है
selected_tags.delete(tag)
को selected_tags = selected_tags.map{|t| t if t == tag ? nil : t}.compact
में बदल दिया, अब यह काम करता है! धन्यवाद!
selected_tags = selected_tags.map{|t| t == tag ? nil : t}.compact
होना चाहिए।
selected_tags
ऐरे का एक उदाहरण है जिसे संदर्भ द्वारा विधि में पारित किया जाएगा, इसलिए व्यवहार सही है।
शायद आपको यही चाहिए:
module TagsHelper
def link_or_span(tag, selected_tags)
if selected_tags.include?(tag)
link_to tag.title, tag
else
# Whatever you want to do
end
end
end
selected_tags
को इंटीजर में बदलें; 2) selected_tags.delete(tag)
को selected_tags += 1
में बदलें। यह अपेक्षा के अनुरूप चलता है - टेम्पलेट में यह संस्करण अछूता रहता है। ऐसा क्यों है?
selected_tags.delete(tag)
ने selected_tags
ऑब्जेक्ट को ही संशोधित किया, लेकिन selected_tags += 1
का अर्थ selected_tag = selected_tag + 1
है, जो गणना परिणाम को selected_tag
को निर्दिष्ट करेगा, न कि मूल ऑब्जेक्ट को संशोधित करेगा।
selected_tags += 1
selected_tag = selected_tag + 1
के समान है जबकि selected_tags
स्वयं पूर्णांक है?! मुझे बेवकूफ कहो, मैं पूरी तरह से खो गया हूँ।
संबंधित सवाल
नए सवाल
ruby-on-rails
रूबी ऑन रेल्स रूबी में लिखा गया एक ओपन सोर्स फुल-स्टैक वेब एप्लिकेशन फ्रेमवर्क है। यह लोकप्रिय एमवीसी फ्रेमवर्क मॉडल का अनुसरण करता है और इसे "कॉन्फिगरेशन ओवर कॉन्फिगरेशन" अप्रोच डेवलपमेंट के दृष्टिकोण के लिए जाना जाता है।