2015-01-25 2 views
0

У меня есть некоторые рельсы обертоны, как:Дополнительная разрыв строки в рельсах частичного, когда переменный является необязательным

<%= content_tag_for(:div, child) do %> 
    <%= child.var1 %><br> 
    <%= child.var2 unless child.var2.blank? %><br> 
    <%= "Some string" if child.is_stringy? %> 
<% end %> 

, которые отображаются как так:

<%= render @object.children %> 

Как сделать вторые и третьи разрывы строк быть необязательными без необходимости обернуть весь блок вокруг, если/если-то конец, например, так:

<%= content_tag_for(:div, child) do %> 
    <%= child.var1 %><br> 
    <% unless child.var2.blank? then %> 
     <%= child.var2 %><br> 
    <% end %> 
    <% if child.is_stringy? then %> 
     <%= "Some string" if child.is_stringy? %><br> 
    <% end %> 
<% end %> 

Я реа lly, как использовать if/if inline, для краткости и краткости. Я могу сделать что-то вроде этого:

<%= child.var2 + tag(:br) unless child.var2.blank? %> 

Но тогда я должен исправить сбежавшего тег, например:

<%= raw(child.var2 + tag(:br)) unless child.var2.blank? %> 

Который работает, но делает меня немного неудобный о разрешении произвольный HTML через var2. Какие-либо предложения?

+0

С [Haml] (http://haml.info/) или [Тонкий] (http://slim-lang.com /) вы можете писать меньше. –

+0

Как и в случае с примечанием, ключевое слово 'then' не требуется нигде в приведенном выше коде. –

ответ

0

Если вы часто это делаете, вы всегда можете определить помощник вида. Что-то вроде этого:

def break_after(value) 
    return unless value.present? 
    capture do 
    concat value 
    concat tag(:br) 
    end 
end 

А потом ...

<%= break_after child.var1 %> 
+0

Отлично, я закончил тем, что написал его, чтобы быть немного более гибким и принимая параметр условия, но общая идея такая же. – grosa

Смежные вопросы