2016-04-11 5 views
0

У меня есть следующий код:Условный content_tag встроенный стиль

<% content_tag(:h1, :class => ['h1', modifier], :color => '#{partner.color}', :style => 'color: #{partner.color}') do %> 
    <%= yield %> 
<% end %> 

<% modifier %> & <% partner.color %> возвращает строку или ноль.

То, что я хотел бы, чтобы проверить partner.color «s существование и сделать :color => & :style => только если partner.color не равен нулю.

Как это сделать?

+0

'css class || nil' всегда возвращает 'css class'. То же самое со строкой. Какое поведение вы точно ожидаете? – Ilya

+0

Возможно, я не так ясно понимаю. 'modifier' будет либо возвращать строку, либо nil. То же, что и другие. Поведение, которое я хотел бы, это не иметь ': color =>' или ': style =>', если 'partner.color' равно нулю. – thatgibbyguy

+0

@thatgibbyguy, Whats output of: style => color: # {partner.color} '', в html если существует' partner.color' прямо сейчас? – 7urkm3n

ответ

0

Каждый из представленных ответов очень близок к ответу на вопрос и заслуживает upvotes, однако каждый приходит с ошибками. Правильный синтаксис:

<% content_tag(:h1, { :class => ['h1', modifier]} 
       .merge(partner ? { 
       :color => '#{partner.color}', 
       :style => 'color: #{partner.color}' 
       } : {}) 
      ) do%> 
    <% yield %> 
<% end %> 

Мы начинаем тег контента, а затем перейти к отправке в объекте { :class => []}. Оттуда мы объединимся в новый объект, который проверит некоторую логику .merge({}).

merge необходимо будет взять объект, поэтому мы сначала проверим, доступен ли наш класс partner ?, без необходимости его проверки. Если существует partner, мы передаем параметры партнера в объекте, если мы не передаем пустой объект.

1

Это всего лишь рубиновый хеш. Например, вы можете сделать следующее:

+0

'undefined method' merge 'для [" h1 ", nil]: Array' – thatgibbyguy

1

Его полностью работает, проверьте это.

<%= content_tag(:h1, {:class => ['h1', modifier]}.merge(partner.color.present? ? {:color => "#{partner.color}", :style => "color: #{partner.color}" } : {})) do %> 
    <%= yield %> 
<% end %> 
Смежные вопросы