2010-06-23 10 views
22

मैं रूबी पर रूबी का उपयोग कर रहा हूं और मेरी html.erb फ़ाइलों में से एक में रूबी कोड का एक ब्लॉक चलाने की आवश्यकता है। पढ़ने के लिएमैं html.erb फ़ाइल में रूबी की कई पंक्तियों को कैसे चला सकता हूं

<% def name 
name = username %> 
<%= name %> 

धन्यवाद: मैं इस तरह यह करना है:

<% def name %> 
<% name = username %> 
<%= name %> 

या इस तरह।

+0

आप एक दृश्य में फ़ंक्शन बनाने का प्रयास क्यों कर रहे हैं? यह मॉडल में सबसे अधिक संभावना है, या यदि नियंत्रक में नहीं है, लेकिन निश्चित रूप से – jigfox

+0

देखें में नहीं, क्षमा करें, मैंने बस एक उदाहरण के रूप में कुछ कोड टाइप किया। – ben

उत्तर

22

ईआरबी फ़ाइल में एक विधि को परिभाषित करना असामान्य है, इसलिए मैं इसके खिलाफ अनुशंसा करता हूं।

आप #each की तरह एक ब्लॉक कॉल करना चाहते हैं, तो आप निम्नलिखित की तरह कुछ कर सकते हैं:

<% names.each do |name| %> 
    <%= name %> 
<% end %> 

<% end %> मत भूलना।

+2

और आप '| name 'के बाद' | 'भूल गए ;-) – jigfox

34

यदि आपको अपने विचार में अतिरिक्त कार्यों की आवश्यकता है, तो आप आमतौर पर उन लोगों को एक सहायक के अंदर घोषित करते हैं।

प्रत्येक नियंत्रक के लिए, यदि कोई सहायक है तो यह स्वचालित रूप से लोड हो जाता है। उदाहरण के लिए, यदि आप एक PeopleController है, app/helpers फ़ोल्डर में, वहाँ एक people_helper.rb होना चाहिए, और यह इस

module PeopleHelper 
    def name 
    #do something 
    username 
    end 
end 

की तरह एक और, बहुत साफ विकल्प दिखना चाहिए, Presenterpattern उपयोग करने के लिए है, लेकिन मैं इसे लगता है कम आम है (दुर्भाग्य से)।

<% 
    counter_1 = 0 
    counter_2 = 1 
    do_some_more_prep_here 
%> 
<% @records.each do |rec|%> 
    <%# do something with the prepped date in each row %> 
<% end %> 
इसके अलावा मेरे लिए

कोड खरोज एचटीएमएल खरोज से ज्यादा महत्वपूर्ण है:

अन्यथा, यदि आप एक ERB दृश्य के अंदर गहरे लाल रंग का कोड की कई पंक्तियों है, जो मैं से बचने की कोशिश की जरूरत है, मैं निम्नलिखित शैली पसंद करते हैं , इसलिए मैं

<table> 
    <% @rows.each do |row| %> 
    <tr> 
     <td><%= row.item1 %></td> 
     <% if row.some_test %> 
     <td><%= row.item2 %></td> 
     <% end %> 
    </tr> 
    <% end %> 
</table> 

पर कुछ पसंद करूंगा लेकिन मुझे इस मामले में अलग-अलग राय सुनने में हमेशा दिलचस्पी है।

+3

सहायक तरीके, निश्चित रूप से जाने का तरीका है। – tadman

-1

मैं कल्पना कर सकता हूं कि एचटीएमएल मार्कअप को डुप्लिकेट न करने के लिए किसी को एक विशेष टेम्पलेट (एक सहायक बनाने में कोई बिंदु नहीं) की आवश्यकता है। यही है, जब परिणामस्वरूप एचटीएमएल पेज में एचटीएमएल मार्कअप के कुछ समान ब्लॉक होते हैं। हालांकि, इसे आसानी से दुरुपयोग किया जा सकता है (अपठनीय कोड)।

<% def f1(a, b, c) %> 
    test: <%= a %>, <%= b %>, <%= c %> 
<% end %> 

<% f1(1, 2, 3) %> 
<% f1(4, 5, 6) %> 
+0

यह मेरे लिए काम नहीं करता है https://i.imgur.com/oWOu5v8.png – barlop

+0

आपका उत्तर काम नहीं करता है, यह सब एक वेबपृष्ठ पर फ़ंक्शन की सामग्री डाल रहा है, इसे HTML के रूप में व्यवहार कर रहा है रेल या रूबी कोड के रूप में नहीं https://i.imgur.com/rhTNtt5.png – barlop

+0

@barlop अनौपचारिक होने के लिए खेद है। मेरा जवाब देखें। क्या ये तुम्हारे लिए कारगर है? शायद यही मेरा मतलब था। –

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