输出比time_ago_in_words()更短
是否有一个Ruby / Rails函数显示比time_ago_in_words()
更短的文本?
例如,而不是5 hours ago
,有可能在5 hours ago
获得?
比利的代码更新。 我更喜欢这样做:
TIME_PATTERN = {' hours'=>'h', ' minutes'=>'m', ' days'=>'d', ' hour'=>'h', ' minute'=>'m', ' day'=>'d'} def time_ago_converter(words) TIME_PATTERN.each_pair do |k, v| words.gsub!(k, v) end words end
在视图中:
<%= time_ago_converter time_ago_in_words(foo.created_at) %>
因为,每次调用time_ago_converter时都要实例化哈希对象。 并且,通过它的外观,可以假设每次渲染视图时都会频繁调用此方法。 相反,我会将它声明为常量并重复使用它。 如果我错了,请在这里纠正我。
另外,我认为这也可以这样做:
TIME_PATTERN = {' hours'=>'h', ' minutes'=>'m', ' days'=>'d', ' hour'=>'h', ' minute'=>'m', ' day'=>'d'} # or make use of locale: # TIME_PATTERN = {' hour'=> I18n.t('h'), ' minute'=> I18n.t('m'), ' day'=> I18n.t('d'), ' hours'=> I18n.t('h'), ' minutes'=> I18n.t('m'), ' days'=> I18n.t('d')} def time_ago_in_words_converter(time) word = time_ago_in_words(time) TIME_PATTERN.each_pair{ |k, v| word.gsub!(k, v) } word end
在视图中:
<%= time_ago_in_words_converter(foo.created_at) %>
干杯!
time_ago_in_words
以固定格式输出单词。 您可以编写帮助程序来处理自定义需求。
def time_ago_converter(words) pattern = {' hour'=>'h', ' minute'=>'m', ' day'=>'d', ' hours'=>'h', ' minutes'=>'m', ' days'=>'d'} pattern.each_pair do |k, v| words.gsub!(k, v) end words end time_ago_converter time_ago_in_words(foo.created_at)
更新:我在键之前添加了一个空格。 此外,time_ago_in_words和此方法都不是非常有效,因为它们对缓存不友好。 如果可能的话,建议使用客户端lib来处理时间。
您可以使用I18n语言环境:
请参阅文件: https : //github.com/svenfuchs/rails-i18n/blob/master/rails/locale/en.yml
根据您的“短文本”要求,您可以根据格式,日期时间,about_x_ *等相应地修改其中的区域设置。