好吧,我的标题可能不是描述我正在尝试做的事情的最佳方式,但一般来说,我如何根据远离的时间量来完成更改 div 的颜色(通过应用不同的 css 类)日期?
我正在使用这个:
<%= todo.due ? todo.due.strftime("%b %d") : nil %>
显示截止日期。
它包含在一个 div 中,如果到期日期超过一周、3 天、今天或过期,我想更改该 div 的类。
是否应该使用某些控制器逻辑来处理,或者视图中的 if else 语句是否有效?
好吧,我的标题可能不是描述我正在尝试做的事情的最佳方式,但一般来说,我如何根据远离的时间量来完成更改 div 的颜色(通过应用不同的 css 类)日期?
我正在使用这个:
<%= todo.due ? todo.due.strftime("%b %d") : nil %>
显示截止日期。
它包含在一个 div 中,如果到期日期超过一周、3 天、今天或过期,我想更改该 div 的类。
是否应该使用某些控制器逻辑来处理,或者视图中的 if else 语句是否有效?
你可以在你的助手中做到这一点
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 给出的答案
高温高压
太容易了……
帮手:
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 %>
您可以使用content_tag 帮助程序并提供自定义类值。类值可以放在帮助器中。
看法:
<%= content_tag :div, :class => todo_class(todo) do -%>
<%= todo.title %>
<% end -%>
帮手:
def todo_class(todo)
if todo.due
'due'
...
end
end