3

さて、私のタイトルは私がやろうとしていることを説明するための最良の方法ではないかもしれませんが、一般的に、離れている時間の長さに基づいて(異なるcssクラスを適用することによって)divの色を変更する方法を達成できますか?日にち?

私はこれを使用しています:

<%= todo.due ? todo.due.strftime("%b %d") : nil %>

期日を表示します。

divにラップされており、期日が1週間以上、3日先、今日、または延滞している場合は、そのdivのクラスを変更したいと思います。

これはいくつかのコントローラーロジックで処理する必要がありますか、それともビューのステートメントが機能する場合はどうなりますか?

4

3 に答える 3

4

簡単すぎる...

ヘルパー:

1)日中:

def style_by_daytime
  case Time.now.hour
  when (6..14) then "morning"
  when (14..20) then "daytime"
  when (20..23) then "evening"
  when (0..6) then "night"
  end
end

2)時間前までに

def style_by_days_gone(by_date)
  ago = (Date.today - by_date).round
  case ago
  when (1..7) then "week"
  when (8..14) then "two_weeks"
  when (15..30) then "month"
  when (31..180) then "several_months"
  else
    if ago > 180
      "many_time_ago"
    end  
  end
end

意見:

<% if todo.due %>
 <div class="<%= style_by_days_gone(todo.due) %>">
   <%= todo.due.strftime("%b %d") %>
 </div>
<% end %>
于 2012-12-24T01:51:55.017 に答える
4

あなたはあなたのヘルパーでこれを行うことができます

def css_select(due) 
  css_class = "passed" #=> deadline already passed
  days_due = (due - Date.today).to_i
  if days_due > 0
     css_class = case  days_due
                   when (0..3) then "threedays" #=> between 3 days
                   when (3..7) then "within7days" #=> between 7 days
                   else
                   "morethanweek" #=> more than a week
                end 
  end
  css_class
end

threedays, passed, within7days and morethanweekは、名前を変更する可能性のあるcssクラスであることに注意してください。

これらは私が行ったテストです

p css_select(Date.parse("2012-12-01")) #=> passed
p css_select(Date.parse("2012-12-25")) #=> with in 3 days
p css_select(Date.parse("2012-12-31")) #=> with in 7 days
p css_select(Date.parse("2013-01-10")) #=> more then 7 days

だからあなたの見解では

<div class=<%= css_select(Date.parse(todo.due)) %>
  #your code goes here
</div>

だからあなたがビューにいるとき、そしてこの答えは@ValeryKvonによって与えられた答えに触発されました

HTH

于 2012-12-24T04:51:38.983 に答える
1

content_tagヘルパーを使用して、カスタムクラス値を指定できます。クラス値はヘルパーに配置できます。

意見:

<%= content_tag :div, :class => todo_class(todo) do -%>
  <%= todo.title %>
<% end -%>

ヘルパー:

def todo_class(todo)
  if todo.due
    'due'
  ...
  end
end
于 2012-12-23T23:18:42.280 に答える