条件content_tag内联样式

时间:2016-04-11 16:29:41

标签: ruby-on-rails

我有以下代码:

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

<% modifier %>&amp; <% partner.color %>将返回一个字符串或零。

我想要检查partner.color是否存在并呈现:color =>&amp;仅当:style =>不为零时才partner.color

我该怎么做?

3 个答案:

答案 0 :(得分:1)

这只是一个红宝石哈希。例如,你可以这样做:

content_tag(:h1, {:class => ['h1', modifier]}.merge( partner.color.nil? ? {} : {:color => '#{partner.color}', :style => 'color: #{partner.color}'}))

答案 1 :(得分:1)

它完全有效,请检查一下。

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

答案 2 :(得分:0)

每个提交的答案都非常接近回答问题并且值得赞成,但每个都有错误。正确的语法是:

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

我们启动内容标记,然后继续发送对象{ :class => []}。从那里我们将合并一个新对象,它将检查一些逻辑.merge({})

merge必须接受一个对象,因此我们首先检查我们的类是否可用partner ?,而无需检查其内容。如果存在partner,我们会传入对象中的伙伴参数,否则我们会传入一个空对象。