是否有Ruby / Rails函数显示比time_ago_in_words()
更短的文本?
例如,代替5 hours ago
是否可以取代5h ago
?
答案 0 :(得分:2)
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来处理。
答案 1 :(得分:1)
您可以将I18n语言环境用于:
请参阅文件:https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/en.yml
根据您的“短文本”要求,您可以根据格式,日期时间,about_x_ *等相应地修改其中的区域设置。
答案 2 :(得分:0)
Billy代码的更新。我宁愿这样做:
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) %>
干杯!