标签:des style http color os io 使用 ar strong
task模型有个datatime型的属性due_at
,现想在每个task后将due_at展示出来。
编辑 /app/views/tasks/index.html.erb
,使得due_at均显示在task后。
<ul id="taskList"> <% @tasks.each do |task| %> <li><strong><%= task.name %></strong> <%= task.due_at %></li> <% end %> </ul>
显示如下:
虽然due的时间已经显示出来了,但是样式很难看。due date能如此显示,主要是因为Time对象调用了to_s。rails扩展了to_s方法以便控制Time的显示格式。一些例子如下:
Format | Result |
---|---|
Task.first.due_at.to_s |
2009-02-19 00:00:00 UTC |
Task.first.due_at.to_s(:long) |
February 19, 2009 00:00 |
Task.first.due_at.to_s(:short) |
19 Feb 00:00 |
Task.first.due_at.to_s(:db) |
2009-02-19 00:00:00 |
如何定制格式?ruby对Time对象提供了strftime函数,其参数可通过查看API documentation page得到。
也可创建自定义的展示格式。更新展示时间代码如下:
<%= task.due_at.strftime("due on %B %d at %I:%M %p") %></li>
刷新页面,呈现信息如下:
如果想在其他的地方也如此格式化Time,则我们需要对代码进行优化。有很多方式可以优化代码,如添加helper方法或为Task模型添加方法。也可通过向to_s传递新的参数实现。与 :long
, :short
or :db
类似,创造自己的方法。
首先,将代码变更为如下形式:
<%= task.due_at.to_s(:due_date) %></li>
时间的格式被存储在Date类名为DATE_FORMATS的hash中,需要将key为 due_date
,值为格式字符放入hash中;由于数据格式在程序运行前应加载进来,故应将修改放入environment.rb
文件中。修改如下:
Time::DATE_FORMATS[:due_date] = "due on %B %d at %I:%M %p"
如此之后,其他的页面也可方便的使用此格式化函数。
原文地址:http://railscasts.com/episodes/31-formatting-time?view=asciicast
RailsCasts31 Formatting Time 时间的格式化
标签:des style http color os io 使用 ar strong
原文地址:http://blog.csdn.net/dazhi_100/article/details/39079071