3

好吧,我的标题可能不是描述我正在尝试做的事情的最佳方式,但一般来说,我如何根据远离的时间量来完成更改 div 的颜色(通过应用不同的 css 类)日期?

我正在使用这个:

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

显示截止日期。

它包含在一个 div 中,如果到期日期超过一周、3 天、今天或过期,我想更改该 div 的类。

是否应该使用某些控制器逻辑来处理,或者视图中的 if else 语句是否有效?

4

3 回答 3

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>

因此,当您在视图中时,此答案的灵感来自@Valery Kvon 给出的答案

高温高压

于 2012-12-24T04:51:38.983 回答
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 回答
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 回答