रेल 4 - आंशिक करने के लिए परिवर्तनशील चर


125

मैं रूबी ऑन रूल्स ट्यूटोरियल का अनुसरण कर रहा हूं और एक समस्या को पार कर गया हूं, जबकि वैरिएबल को पार्टिकल्स में पास करने की कोशिश कर रहा हूं।

मेरा _userअंश इस प्रकार है

<li>
  <%= gravatar_for user, size: 52 %>
  <%= link_to user.name, user %>
</li>

मैं आकार मान के लिए एक संख्या में पास करना चाहूंगा। मैं बिना किसी भाग्य के इस प्रकार कोशिश कर रहा हूं।

<%= render @users, :locals => {:size => 30} %>

जवाबों:


162

यदि आप लोकल पास कर रहे हैं तो आपको आंशिक रेंडर सिंटैक्स की आवश्यकता है

<%= render @users, :locals => {:size => 30} %>

हो जाता है

<%= render :partial => 'users', :collection => @users, :locals => {:size => 30} %>

या नए हैश सिंटैक्स का उपयोग करने के लिए

<%= render partial: 'users', collection: @users, locals: {size: 30} %>

जो मुझे लगता है कि बहुत अधिक पठनीय है


धन्यवाद @jamesw, लेकिन चित्र अभी भी आकार 52 हैं। क्या यह इसलिए है क्योंकि मेरे पास आंशिक रूप से 52 तक आकार निर्धारित है?
डोपेन्सोल्डनर 18

1
हां वास्तव में, आप आकार के पिछले मूल्य को ओवरराइड कर रहे हैं।
अक्षय विश्नोई

3
आप localsहैश को इस तरह के लघु संस्करण का उपयोग करने के लिए छोड़ सकते हैं :<%= render @users, size: 30 %>
पेड्रो अदाम वरगारा

177

PartialRender पर रेल एप से :

डिफ़ॉल्ट मामले का प्रतिपादन

यदि आप संग्रह या लेआउट जैसे किसी भी विकल्प का उपयोग नहीं करने जा रहे हैं, तो आप आंशिक रेंडर करने के लिए रेंडर के शॉर्ट-हैंड डिफॉल्ट का भी उपयोग कर सकते हैं।

उदाहरण:

# Instead of <%= render partial: "account" %>
<%= render "account" %>

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

# @account.to_partial_path returns 'accounts/account', so it can be used to replace:
# <%= render partial: "accounts/account", locals: { account: @account} %>
<%= render @account %>

# @posts is an array of Post instances, so every post record returns 'posts/post' on `to_partial_path`,
# that's why we can replace:
# <%= render partial: "posts/post", collection: @posts %>
<%= render @posts %>

इसलिए, आप sizeनिम्न के रूप में प्रस्तुत करने के लिए एक स्थानीय चर का उपयोग कर सकते हैं :

<%= render @users, size: 50 %>

और फिर इसे _user.html.erbआंशिक में उपयोग करें :

<li>
    <%= gravatar_for user, size: size %>
    <%= link_to user.name, user %>
</li>

ध्यान दें कि size: sizeइसके बराबर है :size => size


14
दूसरे ने प्रस्तुत किया, स्थानीय लोगों के बिना, मेरी जान बचाई। धन्यवाद
cassioscabral

6

भी

render partial: 'user', locals: {size: 30}

या

render 'user', size: 30

उपयोग करने के लिए locals, आपको जरूरत है partialpartialतर्क के बिना , आप बस चर को सीधे सूचीबद्ध कर सकते हैं (भीतर नहीं locals)


5

localsरेल 4.2+ में उपयोग न करें

रेल्स 4.2 में मुझे localsभाग को हटाना था और size: 30इसके बजाय सिर्फ उपयोग करना था। अन्यथा, यह स्थानीय चर को सही ढंग से पारित नहीं करेगा।

उदाहरण के लिए, इसका उपयोग करें:

<%= render @users, size: 30 %>

3

यदि आप रेंडर करने के लिए जावास्क्रिप्ट का उपयोग कर रहे हैं तो उपयोग करें escape_JavaScript("<%=render partial: partial_name, locals=>{@newval=>@oldval}%>");


1

सिंथेटिक थोड़ा अलग है, लेकिन यह मेरी राय में साफ दिखता है:

render 'my_partial', locals: { title: "My awesome title" }

# not a big fan of the arrow key syntax
render 'my_partial', :locals => { :title => "My awesome title" }

1

जब आप एक आंशिक पर रेंडर फ़ंक्शन को कॉल करते हैं, तो आप स्थानीय चर बनाने में सक्षम होते हैं, इसलिए यदि आप एक आंशिक को अनुकूलित करना चाहते हैं तो आप उदाहरण के लिए आंशिक _form.html.erbद्वारा प्रस्तुत कर सकते हैं :

<%= render 'form', button_label: "Create New Event", url: new_event_url %>
<%= render 'form', button_label: "Update Event", url: edit_event_url %>

इस तरह आप बटन और URL के लिए आंशिक रूप से लेबल तक पहुँच सकते हैं, यदि आप रिकॉर्ड बनाने या अपडेट करने का प्रयास करते हैं, तो वे अलग हैं। अंत में, इस स्थानीय चर तक पहुँचने के लिए आपको अपना कोड local_assigns[:button_label]( local_assigns[:name_of_your_variable]) डालना होगा

<%=form_for(@event, url: local_assigns[:url]) do |f|  %>
<%= render 'shared/error_messages_events' %>
<%= f.label :title ,"Title"%>
  <%= f.text_field :title, class: 'form-control'%>
  <%=f.label :date, "Date"%>
  <%=f.date_field :date, class: 'form-control'  %>
  <%=f.label :description, "Description"%>
  <%=f.text_area :description, class: 'form-control'  %>
  <%= f.submit local_assigns[:button_label], class:"btn btn-primary"%>
<%end%>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.