完成した Rails チュートリアル アプリをRails Best Practicesで実行すると、"サーバー側で時間を計算するにはコストがかかりすぎる"ため、メソッドを使用しないようにtime_ago_in_words
という警告が表示されたため、 timeago jQuery プラグインを使用するように実装を変更するサンプル コードが提供されています。 . 面白い変化がありそうだったので、やってみました。使用した元のコードtime_ago_in_words
は次の 2 か所にあります。
アプリ/ビュー/共有/_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))
time
HTML5タグを使用して、次のように timeago を使用するようにコードを変更しました。
アプリ/ビュー/共有/_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
ここにand宣言を追加してjquery.timeago.js
もうまくいきませんでした。また、javascript に依存する他のページ要素が無効になったため、構文がオフになっていると想定しています。
したがって、私が理解している限り、haml ファイルの実装コードは正しいと思いますが、わかりません。
- どのcoffeescriptファイルに呼び出しを入れる
$("time.timeago").timeago()
べきか、そして私が持っているものが間違っている場合はどのように書くべきか timeago
ライブラリが rails-jquery に含まれているかどうか- そうでない場合、それらを適切に含める方法
これに多くの時間を費やした後、私はrails-timeago gem を試してみることにしました。これは、いくつかの優れたヘルパーと同様に、適切に表示する時間を得るのに役立ちました。ただし、上記の Railst()
メソッドの実装では、時間を言葉で取得して i18n 文字列に補間するだけではうまくいかないようです。
time_ago_in_words
では、 Rails 3.2 アプリで i18n を使用して timeago JQuery プラグインを使用することで、どのように望ましい効果を得ることができますか?