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 に答える