2017-03-03 13 views
0

私は日付で複数の表を作成していますが、条件の数によってHTML表の行を異なる色にしたいとします。Railsで表の行の色を変更する

<% (Date.current - 6.months..Date.current + 6.months).each do |date|%> 
    <% if !Shift.where(date: date).blank? %> 
    <% @shifts = LaunchShift.where(date: date).all.order(start_time: :asc, booked: :desc) %> 
    <h2><%= date.strftime('%e %b %Y') %></h2> 

    <div class="table-responsive"> 
    <table class="table table-bordered table-striped"> 
    <thead> 
     <tr> 
     <th>...</th> 
     </tr> 
    </thead> 

    <% @shifts.each_with_index do |shift, index| %> 
     <% if shift.booked? %> 
      <% @booker = Member.find(shift.booked_by) %> 
     <% end %> 
     <tbody> 

     <% if shift.booked? %> <---Trying this for changing colour 
      <tr style="background-color:red"> 
     <% else %> 
      <tr> 
     <% end %> 
     <td><%= shift.start_time.strftime("%H:%M") %></td> 
     <% if shift.booked? %>  
      <td>Booked</td> 
      <td><%= link_to @booker.name, member_path(@booker) %></td> 
     <% else %> 
      <td>Free</td> 
      <td></td> 
     <% end %> 
     [...] 
      </tr> 
     </tbody> 
    <% end %> 
</table> 
    </div> 
<% end %> 

しかしshifts.bookedかかわらのみ予約したとしてマークされた行のいくつかは、赤:this questionの助けを借りて、私は私のシフトビューに次のように試してみましたか? Trueを返します。このアプローチは、私が思っているのとは違った働きをしていますか?これを行うにはJS/JQuery(それらを知らない)を使用しない方が良い方法がありますか?何かアドバイス? ありがとうございました!

答えて

1

シフトは、その後、予約クラスがそうでなければ使用可能なクラスは、三項演算子を使用して適用されますが適用されます予約されている場合は、

.booked{ 
    background-color: red; 
} 

.available{ 
    background-color: grey; 
} 

<tr class="<%= shift.booked? ? 'booked' : 'available' %>"> 
</tr> 

のように試すことができます。

+0

でshift_helper.rbファイルを作成し、これは良い方法である、ありがとうございます。しかし、問題は論理がどこかで間違っているということです。すべての予約シフトが赤ではなく、利用可能なシフトがすべて灰色ではありません。これは、テーブルを作成するためのループ内のループとは何か関係がありますか?データは正しく表示されますが、何らかの理由でifステートメントが常に機能するとは限りません。何か案は? – SKR

+0

ステートメントが機能しない場合は? – ashvin

+0

@SKRデータが正しく表示されている場合は、条件が正しいはずです。 シフトが予約されていれば赤色が適用されます。 – ashvin

1

@ ashvinの解はうまくいきますが、一歩進んで、三項演算子をヘルパーメソッドに入れて、論理から自由な視点を保つのは良いことでしょう。例えば

<tr class="<%= booked_class(shift) %>"> 

ヘルパーフォルダ

module ShiftHelper 
    def booked_class(shift) 
    shift.booked? ? "booked" : "available" 
    end 
end 
+0

はいこれは、条件ベースでクラスを適用するより良い方法です。 – ashvin

関連する問題