0

我有很多东西,things = [1, 500, 900, 0, -105, -8, 16, 4]我想根据它们是否大于零、小于零或等于零,在我的视图中以红色、绿色或黑色显示它们。

现在我的代码看起来像:

<%= @things.each do |p|%>
 <% if p > 0 %>
      <%= p  %>
    <% elsif p < 0 %>
      <%= p %>
    <% else %>
      <%= p %>
 <% end %>
<% end %>

我没有正确显示开始的数字,并且我已经将它们放入 div 中进行了几次迭代,但似乎没有任何效果。一旦我在课堂上得到它们,我就可以很容易地添加颜色。(我还需要保持它们在数组中的相同顺序)

任何帮助将不胜感激。

4

3 回答 3

3

不知道这里有什么问题

 <% @things.each do |p|
     if p < 0
       class_name = 'red'
     elsif p > 0 
       class_name = 'green'
     else 
       class_name = 'black'
     end %>
     <div class="<%=class_name%>"><%= p %></div> 
<% end %>

然后 css :

.red{color:red;}
.green{color:green;}
.black{color:black;}

编辑:在您的示例中,您使用的是<%= @things.each. 不要<%=用于不应该输出任何东西的东西

于 2012-08-02T17:34:06.403 回答
0

我能想到的第一件事是构建一个视图助手

def set_color number 
  case
    when number == 0 
       "black"
    when number > 0
       "green"
    when number < 0
       "red"
  end
end

并且在视图中

<% @things.each do |p|%>
<div class="<%= set_color(p)%>"> <%= p %> </div>
<% end %>

最后做CSS

于 2012-08-02T17:37:02.230 回答
0

如果您希望它们按正/负/0 分组

<% @things.group_by{ |n| n<=>0 }.sort.each do |sign,items|%>
  <ul class="<%= sign==-1 ? 'negative' : sign==1 ? 'positive' : 'zero'%>">
    <% items.each do |item| %>
      <li><%= item></li>
    <% end %>
  </ul>
<% end %>

如果您希望它们按数组顺序排列,只需分类

<ul>
  <% @things.each do |thing|
    css = case thing <=> 0
      when -1 then "negative"
      when  0 then "zero"
      when  1 then "positive"
    end
    %>
    <li class="<%=css%>"><%= thing %></li>
  <% end %>
</ul>

each请注意,您在包装器的开头错误地使用了等号:

<%= @things

...这将导致to_s整个数组的表示被输出(你不希望这样)。

于 2012-08-02T17:37:03.053 回答