我有以下代码:
<% 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
。
我该怎么做?
答案 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
,我们会传入对象中的伙伴参数,否则我们会传入一个空对象。