Запустив готовое приложение Rails Tutorial с помощью Рекомендации по использованию 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))
Я изменил код для использования timeago следующим образом, используя тег HTML5 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() в мой файл coffeescript:
приложение/активы/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
и jquery.timeago.js
не сработало, и я также предполагаю, что мой синтаксис отключен, поскольку они сломали другие элементы моей страницы, которые полагаются на javascript.
Итак, насколько я понимаю, я думаю, что у меня правильный код реализации в моих файлах haml, но я просто не знаю:
- в какой файл coffeescript я должен поместить вызов
$("time.timeago").timeago()
и как я должен его написать, если то, что у меня есть, неверно - включены ли библиотеки
timeago
в rails-jquery - если нет, то как их правильно включить
Потратив на это много времени, я все же попробовал гем rails-timeago, который, а также наличие нескольких хороших помощников, действительно работал над тем, чтобы время отображалось правильно. Тем не менее, похоже, это не очень хорошо работает с реализацией метода rails t()
выше, чтобы просто получить время в словах, а затем интерполировать его в строку i18n.
Итак, как я могу получить желаемый эффект time_ago_in_words
с помощью плагина timeago JQuery в приложении Rails 3.2 с i18n?