根据元素的大小将数组中的项放入div类中

时间:2012-08-02 17:25:38

标签: ruby-on-rails ruby class html

我有一系列事物,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中,似乎没有任何效果。一旦我上课,我就可以很容易地添加颜色。 (我还需要保持它们与数组中的顺序相同)

非常感谢任何帮助。

3 个答案:

答案 0 :(得分: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。不要将<%=用于不应输出任何内容的东西

答案 1 :(得分: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

答案 2 :(得分: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表示(您不希望这样)。