通过Rails Best Practices运行我完成的 Rails 教程应用程序给我一个警告,不要使用该time_ago_in_words
方法,因为“在服务器端计算时间太贵了”,因此他们提供了一些示例代码来更改您的实现以使用timeago jQuery 插件. 听起来它会做出有趣的改变,所以我尝试了一下。我使用的原始代码time_ago_in_words
在两个地方:
app/views/shared/_feed_item.html.haml
# ...
%span.timestamp
= t('.time_posted_ago', time: time_ago_in_words(feed_item.created_at) )
app/views/microposts/_micropost.html.haml
# ...
%span.timestamp
= t('.time_posted_ago', time: time_ago_in_words(micropost.created_at))
我使用 HTML5 标记将代码更改为使用 timeago,如下所示time
:
app/views/shared/_feed_item.html.haml
# ...
%time.timeago{ datetime: feed_item.created_at.getutc.iso8601 }
= t('.time_posted_ago', time: feed_item.created_at.to_s)
app/views/microposts/_micropost.html.haml
# ...
%time.timeago{ datetime: micropost.created_at.getutc.iso8601 }
= t('.time_posted_ago', time: micropost.created_at.to_s)
我想,我只需要将 timeago() 方法添加到我的咖啡脚本文件中:
应用程序/资产/javascripts/application.js.coffee
$(document).ready ->
$("time.timeago").timeago()
这不起作用,所以我尝试将声明移至microposts.js.coffee和users.js.coffee,无论有无,但$(document).ready ->
仍然不行。然后我想也许 timeago 所需的库默认情况下不包含在 中jquery-rails
,所以我添加了它们:
应用程序/资产/javascripts/application.js.coffee
//= require jquery
//= require jquery_ujs
//= require jquery.min
//= require jquery.timeago
//= require bootstrap
//= require_tree .
在此处添加jquery.min.js
andjquery.timeago.js
声明不起作用,而且我还假设我的语法已关闭,因为它们破坏了我依赖于 javascript 的其他页面元素。
所以,据我了解,我认为我的 haml 文件中的实现代码是正确的,但我只是不知道:
- 我应该在哪个咖啡脚本文件中
$("time.timeago").timeago()
调用以及如果我所拥有的不正确我应该如何编写它 timeago
rails-jquery 中是否包含库- 如果不是,如何正确包含它们
在花了很多时间在这之后,我最终尝试了rails-timeago gem,它除了有一些不错的助手外,确实可以让时间正确显示。但是,它似乎不能很好地与t()
上面的 rails 方法实现配合使用,以便仅以文字形式获取时间,然后将其插入到 i18n 字符串中。
那么,如何time_ago_in_words
在带有 i18n 的 Rails 3.2 应用程序中使用 timeago JQuery 插件获得预期的效果?