2011-07-12 18 views
59

पर पैरामीटर पास करना मेरे पास एक दृश्य है जो एकाधिक छवियों और उन छवियों के संबंधित टैग प्रदर्शित करता है। मैंने प्रत्येक छवि और उसके टैग के लिए आंशिक दृश्य का उपयोग करने का निर्णय लिया, लेकिन मुझे आंशिक दृश्य में छवि ऑब्जेक्ट में गुजरने में परेशानी हो रही है।आंशिक दृश्य

<table> 
    <%= image.id %> 
    <%= image_tag image.src %> 
</table> 

मैं this सूत्र में पढ़ा है कि मैं पारित कर सकते हैं:

<table> 
    <% @images.each do |i| %> 
    <tr> 
     <%= render :partial => :image_tag, :image => i %> 
    </tr> 
    <% end %> 
</table> 

यहाँ आंशिक दृश्य के प्रासंगिक कोड (आंशिक दृश्य के नाम पर है _image_tag.html.erb) है: यहाँ मुख्य दृश्य के प्रासंगिक कोड है छवि ऑब्जेक्ट में जिस तरह से मैं वर्तमान में इसे कर रहा हूं। मैंने रेंडर विधि पर एक विकल्प हैश के माध्यम से आईडी में गुजरने की कोशिश की, और यह भी काम नहीं किया। मुझे जो त्रुटि मिल रही है वह है:

undefined method `model_name' for Symbol:Class 

लाइन के चारों ओर केंद्रित जहां मैं रेंडर कॉल कर रहा हूं: मुख्य दृश्य में आंशिक।

उत्तर

88
<%= render partial: "image_tag", locals: {image: i} %> 

यह है कि आप आंशिक रूप से चर कैसे पारित करेंगे।

+0

मैं वास्तव में पहले से ही था और वर्तमान में एक ही त्रुटि प्राप्त कर रहा था। समस्या के कारण कुछ और? – jnevelson

+0

मेरा अनुमान है कि "image_tag" एक रेल सहायक सहायक विधि है और आपके आंशिक नाम से टकरा रहा है। क्या आपने अपना आंशिक नाम बदलने की कोशिश की है? –

+0

उचित बिंदु संदर्भ दिया, लेकिन मैं इसे सरल रखने के लिए केवल प्रश्न में 'छवि' डाल दिया। मेरा वास्तविक कोड अलग-अलग नाम दिया गया है, इसलिए यह मुद्दा नहीं है। – jnevelson

10

आप भी इस तरह एक आंशिक करने के लिए पूरी वस्तु पारित कर सकते हैं:

<%= render :partial => "partialpath", :object => :image %> 

आप जो भी आपके आंशिक कहा जाता है के साथ अपने मामले में छवि और आंशिक पथ के साथ मैं की जगह लेंगे। आंशिक अंदर के अंदर आंशिक नाम के समान नाम के साथ स्थानीय चर तक पहुंच होगी। तो यदि आपके आंशिक नाम "छवि" है तो स्थानीय चर छवि आपके द्वारा पास की जाने वाली वस्तु होगी।

संपादित करें: रेल गाइड को देखते हुए रेल 3 की तरह दिखता है: ऑब्जेक्ट को अब एक आवृत्ति चर के रूप में एक्सेस किया जाता है स्थानीय तो @image आप आंशिक में उपयोग करेंगे।

+2

मुझे नहीं लगता कि आपका 'संपादित करें' सही है। [उद्धरण] (http://guides.rubyonrails.org/layouts_and_rendering.html#passing-local-variables): * रेल के पिछले संस्करणों में, डिफ़ॉल्ट स्थानीय चर एक आंशिक चर के समान आंशिक रूप से समान नाम के साथ देखेगा माता पिता। इस व्यवहार को 2.3 में बहिष्कृत कर दिया गया था और रेल 3.0 में हटा दिया गया है। * आपके उत्तर में, ऑब्जेक्ट का मान 'ऑब्जेक्ट' के रूप में पारित किया गया है, आंशिक रूप से 'आंशिकपथ' नामक स्थानीय चर के रूप में आंशिक रूप से पहुंच योग्य होगा ('partialpath' नहीं ' , '@ छवि' या' छवि') – Zabba

+0

मैं @Zabba – amulous

53

उन लोगों के लिए कुछ और विचार करना जो आंशिक रूप से मूल्य (ओं) भेजने में परेशानी हो रही हैं। यदि आप छोड़ देते हैं 'आंशिक:' अपने आंशिक पथ, इसलिए की तरह ... पहले:

<%= render 'my_partial', :locals => {:greeting => 'Hello world', :x => 36} %> 

... ऐसा लगता है कि आप सीधे स्थानीय लोगों हैश मान उपयोग करने में असमर्थ हो जाएगा। , अपने आंशिक पथ से पहले निम्नलिखित की तरह ...:

<div> 
    <h1> <%= locals[:greeting] %> , my x value is <%= locals[:x] %> </h1> 
</div> 

हालांकि, जिनमें शामिल हैं: बल्कि, आपको निम्न कार्य करने की आवश्यकता होगी 'आंशिक':

<%= render partial: 'my_partial', :locals => {:greeting => 'Hello world', :x => 36} %> 

... आप की अनुमति देता है सीधे, हैश मान तक पहुँचने के लिए तो जैसे:

<div> 
    <h1> <%= greeting %> , my x value is <%= x %> </h1> 
</div> 

बस विचार करने के लिए कुछ है, मैं इस समस्या से ऊपर फिसल गया हो रही किया गया था जब स्थानीय लोगों हैश का उपयोग करने की कोशिश कर रहा मूल्यों और एहसास मैंने 'आंशिक:' घटक छोड़ दिया था।

+0

से सहमत हूं आपने मुझे बचाया। धन्यवाद! – hbobenicio

+1

पिथियर रेल 4 वाक्यविन्यास '<% = आंशिक प्रस्तुत करें:' my_partial ', स्थानीय: {ग्रीटिंग:' हैलो वर्ल्ड ', x: 36}%> ' – Jerome

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