2

Rails 3アプリケーションで、年齢に応じてテーブルの行を強調表示する最もきれいなDRYの方法は何ですか?

<% @faults_open.each do |fault| %>
  <tr>
    <td><%= fault.name %></td>  
    <td><%= fault.faulttype %></td>
    <td><%= fault.priority %></td>
    <td><%= time_ago_in_words(fault.created_at) %> ago</td>
    <td><%= link_to 'Show', fault %></td>
  </tr>
<% end %>

CSSを使用してスタイルを設定できる、年齢を示すクラスをテーブル行に適用したいと思います。

<% @faults_open.each do |fault| %>
  <tr <% if fault.created_at > Date.1.week.ago %>class="weekold"<% end %>>
    <td><%= fault.name %></td>  
    <td><%= fault.faulttype %></td>
    <td><%= fault.priority %></td>
    <td><%= time_ago_in_words(fault.created_at) %> ago</td>
    <td><%= link_to 'Show', fault %></td>
  </tr>
<% end %>

上記のようなものですが、明らかにそれらをビューに追加するのは面倒です。次のようないくつかの年齢を追加する予定です。

weekold
twoweeksold
monthold
sixmonthold
yearold
ancient

ヘルパーが最もきちんとした方法だと思いますが、ヘルパーがどのように機能するかはわかりません。任意のポインタをいただければ幸いです。

4

1 に答える 1

2

最近、似たようなことをして、おおよその週齢に対応するクラス名を行に追加してから、CSSを使用して実際の強調表示を行いました。

ヘルパーを使ってみませんか..(ほんの一例)

def highlight_age_class (created_at)
  @@today ||= Date.today
  num_weeks = ((@@today - created_at.to_date) / 7).floor
  class_name = "aged_#{num_weeks}_weeks"
  num_weeks == 1 ? class_name.singularize : class_name
end

あなたのHTMLで..

<tr class="<%= highlight_age_class fault.created_at %>">

いくつかのCSSと組み合わせる。

.aged_1_week
.aged_1_weeks
.aged_4_weeks
.aged_24_weeks
.aged_56_weeks

etc

その後、年齢を強調するためのヘルパーメソッドの拡張と最適化に集中できます。

于 2012-10-25T15:30:13.907 に答える