好吧我的标题可能不是描述我正在尝试做什么的最佳方式,但一般来说,我如何根据时间量完成更改div的颜色(通过应用不同的css类)远离约会?
我正在使用它:
<%= todo.due ? todo.due.strftime("%b %d") : nil %>
显示截止日期。
它包含在一个div中,如果截止日期超过一周,距离今天或过期3天,我想更改该div的类别。
是否应该使用某些控制器逻辑来处理,或者视图中的else语句是否有效?
答案 0 :(得分:3)
太容易了......
助手:
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 %>
答案 1 :(得分:3)
您可以在帮助
中执行此操作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的答案givne
HTH
答案 2 :(得分:0)
您可以使用content_tag helper并提供自定义类值。类值可以放在帮助器中。
查看:
<%= content_tag :div, :class => todo_class(todo) do -%>
<%= todo.title %>
<% end -%>
助手:
def todo_class(todo)
if todo.due
'due'
...
end
end