web-dev-qa-db-ja.com

Rails / ERBでの条件付きタグの折り返し

これをERBで書くための最も読みやすいおよび/または簡潔な方法は何でしょうか?自分の方法を書くことは好ましくありません。これに対するよりクリーンなソリューションを社内の他の人に広めたいからです。

<% @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 %>

==更新==

タグにとらわれない、より一般的なバージョンのGalの回答を使用しました。

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 %>
22

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 %>
17
Gal

試してみてください:

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

私はあなたの論理を世話するヘルパーを使うことを提案します。

ビュー内の条件文などは、できるだけ長く避けてください。

1
Esse

PreciousBodilyFluidsの答えは好きですが、既存のメソッドが行うことを厳密に実行するわけではありません。本当にラッピングdivを持つことができない場合は、これが望ましい場合があります。

<% @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 %>
0
Unixmonkey