2011-04-27 4 views
20

ईआरबी में इसे लिखने के लिए सबसे अधिक पढ़ने योग्य और/या संक्षिप्त तरीका क्या होगा? अपनी खुद की विधि लिखना बेहतर नहीं है, क्योंकि मैं अपनी कंपनी में दूसरों के लिए क्लीनर समाधान फैलाना चाहता हूं।रेल/ईआरबी में सशर्त टैग रैपिंग

<% @items.each do |item| %> 
    <% if item.isolated? %> 
    <div class="isolated"> 
    <% end %> 

    <%= item.name.pluralize %> <%# you can't win with indentation %> 

    <% if item.isolated? %> 
    </div> 
    <% end %> 
<% end %> 

== अपडेट ==

मुझे लगता है कि टैग नास्तिक है गल के जवाब की एक अधिक सामान्य संस्करण का उपयोग किया।

def conditional_wrapper(condition=true, options={}, &block) 
    options[:tag] ||= :div 
    if condition == true 
    concat content_tag(options[:tag], capture(&block), options.delete_if{|k,v| k == :tag}) 
    else 
    concat capture(&block) 
    end 
end 

== प्रयोग

<% @items.each do |item| %> 
    <% conditional_wrapper(item.isolated?, :class => "isolated") do %> 
    <%= item.name.pluralize %> 
    <% end %> 
<% end %> 

उत्तर

17

तुम सच में DIV सशर्त होना चाहते हैं, तो आप कुछ इस तरह कर सकता है: application_helper.rb

def conditional_div(options={}, &block) 
    if options.delete(:show_div) 
     concat content_tag(:div, capture(&block), options) 
    else 
     concat capture(&block) 
    end 
    end 

में

पुट इस जो तो आप अपने ध्यान में रखते हुए इस तरह का उपयोग कर सकते हैं:

<% @items.each do |item| %> 
    <% conditional_div(:show_div => item.isolated?, :class => 'isolated') do %> 
    <%= item.name.pluralize %> 
    <% end %> 
<% end %> 
+0

सोचा था कि मैं इससे बचना चाहता था। अंत में यह दिशा मैंने चुना है। –

3

प्रयास करें:

<% @items.each do |item| %> 
    <div class="<%= item.isolated? 'isolated' : '' %>"> 
    <%= item.name.pluralize %> 
    </div> 
<% end %> 
+0

धन्यवाद लेकिन दुर्भाग्य से यह काम नहीं करेगा क्योंकि इसमें अभी भी एक div शामिल होगा जो अभी भी प्रवाह को तोड़ देगा। –

+1

मेरे उद्देश्यों के लिए काम किया (इस प्रश्न के दायरे के बाहर)। धन्यवाद! –

1

मैं एक सहायक है कि आपके तर्क का ख्याल रखना होगा का उपयोग कर का सुझाव देगा।

यथासंभव लंबे समय तक सशर्त, यदि आदि विचार से बचें।

0

मुझे PreciousBodilyFluids का जवाब पसंद है, लेकिन यह आपके मौजूदा तरीके से बिल्कुल सही नहीं करता है। क्या तुम सच में एक रैपिंग div नहीं कर सकते हैं, इस prefereable हो सकता है:

<% @items.each do |item| %> 
    <% if item.isolated? %> 
    <div class="isolated"> 
     <%= item.name.pluralize %> 
    </div> 
    <% else %> 
    <%= item.name.pluralize %> 
    <% end %> 
<% end %> 

एक सहायक विधि यह सब करने के लिए शायद इस प्रकार दिखाई देगा:

def pluralized_name_for(item) 
    if item.isolated? 
    content_tag(:div, item.name.pluralize, :class => 'isolated') 
    else 
    item.name.pluralize 
    end 
end 

फिर अपने दृश्य कोड इस प्रकार दिखाई देगा :

<% @items.each do |item| %> 
    <%= pluralized_name_for(item) %> 
<% end %>