使用HAML有条件地设置HTML元素ID

时间:2010-10-01 16:23:50

标签: ruby-on-rails if-statement haml

我正在尝试用haml编写这个html,以便在项目是当前项目时添加id标记。这是为了设置jquery突出显示。

<% if line_item == @current_item %>
<tr class="line_item id="current_item">
<% else %>
<tr class="line_item">
<% end %> 
  <td><%= line_item.quantity %>&times;</td>
  <td><%= line_item.product.title %></td> 
  <td class="item_price"><%= number_to_currency(line_item.total_price) %></td>
</tr>

因为我不想编写辅助方法,所以我将if语句放在标记中:

%tr.line_item{ :id => (line_item == @current_item ? '' : 'current_item') }
%td
    = line_item.quantity
%td 
    \x #{line_item.product.title}
%td.item_price
    = number_to_currency(line_item.total_price)
%td.item_remove
    = button_to 'Remove', line_item, :method => :delete

但是,'current_item'的id标签包含所有项目,而不仅仅是当前项目。这导致javascript突出显示所有或错误的条目。关于如何让haml合作的想法?

3 个答案:

答案 0 :(得分:33)

先生,嗯,你的病情错了: - )

应该是

line_item == @current_item ? "current_item" : ""

有一件事情并不漂亮 - 你最后用id=""来表示其他项目。但有一个简单的治疗方法:

%tr.lineitem{ :id => (line_item == @current_item ? "current_item" : nil)}

当您返回属性的nil值时,HAML将忽略它,它将不会出现在输出中。

答案 1 :(得分:5)

这也可以作为接受答案中第一个解决方案的替代方案

= f.input_field :hello, disabled: (true unless SOME_CONDITION_HERE)

答案 2 :(得分:0)

在问题的背景下接受@ vladCovaliov的回答:

%tr.line_item{ id: (@current_item unless @current_item != line_item) }