これを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 %>
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 %>
試してみてください:
<% @items.each do |item| %>
<div class="<%= item.isolated? 'isolated' : '' %>">
<%= item.name.pluralize %>
</div>
<% end %>
私はあなたの論理を世話するヘルパーを使うことを提案します。
ビュー内の条件文などは、できるだけ長く避けてください。
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 %>