2011-02-25 14 views
54
<%= render :partial => 'partial/path', :locals => {:xyz => 'abc'} %> 

बनामप्रस्तुत करना आंशिक स्थानीय लोगों

<%= render :partial => 'partial/path', :object => @some_object %> 

मुझे लगता है कि पहले एक एक स्थानीय चर नामित xyz आंशिक और दूसरा एक एक स्थानीय चर नामित वस्तु आंशिक में से उपलब्ध कराते उपलब्ध बनाने । तो अंतर क्या है? (स्थानीय लोगों के अलावा परिवर्तनीय से अधिक की अनुमति देता है)

उत्तर

30

दूसरे मामले में: ऑब्जेक्ट डिफ़ॉल्ट रूप से आंशिक रूप से समान नाम के साथ एक चर को परिभाषित करेगा। यदि मेरे आंशिक टेम्पलेट को _user.html.erb नाम दिया गया है तो टेम्पलेट में परिभाषित "उपयोगकर्ता" नामक एक स्थानीय चर होगा।

आप एक अलग चर नाम निर्दिष्ट कर सकते हैं: as => "another_name"।

यह यहाँ प्रलेखित है: http://api.rubyonrails.org/classes/ActionView/PartialRenderer.html, यहाँ: http://apidock.com/rails/ActionView/PartialRenderer

... और पुराने रेल (संस्करण < = v3.09) के लिए: http://apidock.com/rails/ActionView/Partials

+3

प्रलेखन यहां ले जाया: [http://api.rubyonrails.org/ कक्षाएं/एक्शन व्यू/PartialRenderer.html] (http://api.rubyonrails.org/classes/ActionView/PartialRenderer.html) – kimos

48

दूसरा रूप

render :partial => 'account', :object => @some_account 

सुनिश्चित करेगा कि आंशिक में account चर @some_account पर सेट किया जाएगा। आप :as विकल्प का उपयोग कर चर का नाम बदल सकते हैं।

:locals का सबसे बड़ा लाभ यह है कि

  • आप वस्तुओं और नाम पर बहुत स्पष्ट नियंत्रण है
  • आप निर्दिष्ट कर सकते है 1 से अधिक चर

तो आप की तरह कुछ कर सकते हैं

render partial => 'some_view', :locals => { :user => account.user, :details => some_details_we_retrieved } 

स्पष्ट पृथक्करण करने की संभावना जब आवश्यक हो ible।

:locals दृष्टिकोण का नुकसान यह है कि इसे और अधिक वर्बोज़ है, और कभी कभी एक साधारण

render :partial => 'account' 

तो एक है जो आप सूट सबसे अच्छा उपयोग करने

render :partial => 'account', :locals => {:account => @account } 

के समान है (या जहां यह सबसे अच्छा सूट)।

+0

मेरे पास एक उदाहरण है जहां मैं अपने आंशिक में ऑब्जेक्ट के माध्यम से ऑब्जेक्ट वैरिएबल के नाम तक पहुंच सकता हूं .. जो अजीब है। –

+0

यदि '@ खाता' शून्य है,': object => @ account' आंशिक रूप से खाता उपलब्ध नहीं कराएगा; आपको ऐसा कुछ करने का प्रयास करने में त्रुटि मिलेगी: 'यदि खाता <कुछ करें> '। यदि आप सुनिश्चित नहीं हैं कि @account परिभाषित किया गया है, तो 'लोकल => {: खाता => @ खाता} ' –

13

आप रेल 3+ उपयोग कर रहे हैं, वहाँ एक और भी आसान सिंटैक्स का उपयोग करने:

# Instead of <%= render partial: "account", locals: { account: @buyer } %> 
<%= render 'account', account: @buyer %> 

स्रोत: Action View Partials

+3

FYI का उपयोग करें, यदि आप नियंत्रक से आंशिक प्रस्तुत करने का प्रयास कर रहे हैं, तो यह छोटा फॉर्म ** होगा काम नहीं**। –

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

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