我有一系列事物,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中,似乎没有任何效果。一旦我上课,我就可以很容易地添加颜色。 (我还需要保持它们与数组中的顺序相同)
非常感谢任何帮助。
答案 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)
<% @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
表示(您不希望这样)。