如何在HAML%li HTML标记的CSS属性中成功插入Ruby?

Rud*_*ils 3 css haml interpolation ruby-on-rails erb

长时间听众,第一次来电.我是芝加哥代码学院的一个6个月大的开发者,我已经坚持这个问题几个小时了.事先,我感谢您的所有帮助和时间.

我正在将ERB模板转换为HAML.再培训局是:

<ul class="nav nav-list">
  <li class="nav-header">
    <%= navigation_header %>
  </li>
  <% @navigation_links.each do |link| %>
  <% if link[:name].present? %>
    <li <%= link[:name] == @topic ? "class='active'" : "" %>>
      <%= link_to link[:name], link[:url] %>
    </li>
  <% else %>
    <hr />
  <% end %>
  <% end %>
</ul>
Run Code Online (Sandbox Code Playgroud)

我遇到麻烦的ERB线是:

<li <%= link[:name] == @topic ? "class='active'" : "" %>>
Run Code Online (Sandbox Code Playgroud)

我已经测试了很多变化,尽可能多地阅读HAML参考,集中在这一部分:

您还可以使用#{}插值在HTML样式属性中插入复杂的表达式:

%span(class="widget_#{@widget.number}")
Run Code Online (Sandbox Code Playgroud)

...并搜索了Google和StackOverflow,但我无法正确输出; HAML一直无视内联CSS.经过我所有的基础工作,我对这个版本非常有信心,但它没有用:

- @navigation_links.each do |link|
  - if link[:name].present?
    %li{ :class => "#{ link[:name] == @topic ? "active" : ""}" }
      = link_to link[:name], link[:url]
  - else
    %hr
Run Code Online (Sandbox Code Playgroud)

我也试过:erb过滤器,无济于事:

%ul.nav.nav-list
  %li.nav-header
    = navigation_header
- @navigation_links.each do |link|
  - if link[:name].present?
    :erb
      <li <%= link[:name] == @topic ? "class='active'" : "" %>>
    = link_to link[:name], link[:url]
  - else
    %hr
Run Code Online (Sandbox Code Playgroud)

我也尝试过:css过滤器,但失败了.

什么想法可能是错的?这是我在StackOverflow上的第一个问题,所以如果我省略了一些有用的信息或违反了任何规则,请告诉我.

mea*_*gar 7

<li <%= link[:name] == @topic ? "class='active'" : "" %>>
Run Code Online (Sandbox Code Playgroud)

您不需要变量插值.这很容易转化为HAML,如下所示:

%li{:class => (link[:name] == @topic) && "active"}
%li{:class => (link[:name] == @topic) ? "active" : "" }
Run Code Online (Sandbox Code Playgroud)

如果您完全包含或省略该值,则首选第一个.来自HAML文档:

如果指定了单个值并且其计算结果为false,则忽略该值; 否则它会转换为字符串.例如:

.item{:class => @item.is_empty? && "empty"}
Run Code Online (Sandbox Code Playgroud)