2011-04-26 5 views
5

मेरे विचार में मैं वस्तुओं की एक तालिका को फैलाने की कोशिश कर रहा हूं, यह मेरा कोड है:रेल 3: सरणी में पहली वस्तु को अनदेखा करते हुए, वस्तुओं की सरणी के माध्यम से लूपिंग?

<div id='categories_show'> 

    <table border="1"> 
    <tr> 
     <th>Categories</th> 
     <th>CBB's</th> 
    </tr> 
    <% for category in @critical_process.categories %> 
     <tr> 
      <td rowspan="<%= category.capability_building_blocks.size %>"><%= category.category_title %></td> 
      <td><%= category.capability_building_blocks.first.cbb_title %></td> 

     </tr> 
     <% (category.capability_building_blocks - category.capability_building_blocks.first).each do |cbb| %> 
     <tr> 
      <td><%= cbb.cbb_title %></td> 
     </tr> 
     <% end %> 
    <% end %> 

    </table> 
</div> 

हालांकि यह एक त्रुटि फेंक रहा है: can't convert CapabilityBuildingBlock into Array

संबंध सही हैं, त्रुटि आ रही है लाइन जहां मैं सरणी के पहले ऑब्जेक्ट को यहां घटाने का प्रयास करता हूं: <% (category.capability_building_blocks - category.capability_building_blocks.first).each do |cbb| %>

क्या कोई तरीका है कि मैं सरणी में पहली वस्तु को अनदेखा कर सरणी के माध्यम से लूप कर सकता हूं?

धन्यवाद

उत्तर

12

Array.drop का उपयोग करके देखें - http://www.ruby-doc.org/core/classes/Array.html#M000294

<% category.capability_building_blocks.drop(1).each do |cbb| %> 
    <tr> 
    <td><%= cbb.cbb_title %></td> 
    </tr> 
<% end %> 
+0

होने के लिए +1 अच्छा! यह नहीं पता था। – Wukerplank

+0

यह एक अच्छा समाधान है। इस तरह के अधिकांश रूबी कार्यों में परिवर्तित तत्व लौटाते हैं, न कि नई सरणी। मुझे निश्चित रूप से इसका उपयोग करना होगा। –

+0

हाँ, यह काफी अच्छा है। और यह बहुत स्पष्ट है कि क्या हो रहा है। व्यक्तिगत रूप से मुझे यह सरणी इंडेक्स मम्बो जंबो पसंद नहीं है, मुझे हमेशा यह गलत लगता है ...;) – HenningJ

3
<%= (category.capability_building_blocks - [category.capability_building_blocks.first]).each do |cbb| %> 

भी ...

stop_here = category.capability_building_blocks.length 
category.capability_building_blocks[1..(stop_here)].each do |cbb| 
+0

स्वीकार किए जाते हैं जवाब के लिए धन्यवाद, लेकिन मैं व्यक्तिगत रूप से चक के बेहतर पसंद है। –

+0

सभी महान उत्तरों लेकिन मुझे लगता है कि हेनिंगजे थोड़ा सा जवाब देता है। –

4

साथ ही, इस अधिक पठनीय है (और मैं 80% यकीन है कि यह काम करता है हूँ):

<%= category.capability_building_blocks[1..-1].each do |cbb| %> 

आप इच्छित सरणी ऑपरेटर का उपयोग किसी सरणी से किसी भी तत्व का चयन करने के लिए कर सकते हैं। -1 सरणी में अंतिम तत्व का प्रतिनिधित्व करता है।

+0

सही। DRY –

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