轨7.days人类可读的字符串

问题描述:

我知道这看起来微不足道,但让说,在Ruby on Rails的我有轨7.days人类可读的字符串

document.expire_in = 7.days 

我怎么能打印到期mesages的人类可读的版本?

"Document will expire in #{document.expire_in}" 
=> Document will expire in 7 days 

或许真的与I18n.tI18n.l

这个作品的唯一方法的工作原理是

7.days.inspect => “7天”

这是唯一的出路??

我看ActiveSupport::Duratio n和没有看到一个答案

THX

+0

什么是错的'7.days.inspect'单位价值

document = Document.new document.expire_in = "7 days" document.translated_day 

? – alestanis 2013-03-08 17:04:11

+0

检查是一种保留调试,但如果没有别的我只会用它:) – equivalent8 2013-03-08 17:33:18

+0

是的,也是很高兴有东西,(如我所说)可以与I18n翻译所以恩“7天“,SVK”7 dni“... :) – equivalent8 2013-03-08 17:40:04

因此,Rails中没有内置的解决方案。我决定去与

7.days.inspect => "7 days" 

,后来,当项目将得到翻译,我会用一些有意义然而,将这些转换

我建议Robert`s评论一下这个问题扩展ActiveSupport::Duration 。我同意在数据库中保存价值的解决方案,例如:“7天”以及从中做到的东西。像在翻译文档模型(或装饰)

class Document < ActiveRecord::Base 
    #.... 

    def translated_day 
    timeline = expire_in.split(' ') 
    "#{timeline.first} #{I18n.t("timeline.${timeline.last}")}" 
    end 
    #.. 
end 


#config/locales/svk.yml 
svk: 
    timeline: 
    days: "dni" 
+0

'.minutes.inspect'和'.hours.inspect'在几秒内产生结果。 – 2017-02-10 11:55:05

这不回答你的具体问题,但在我看来,你会过得更好设置日期时间是它将到期,然后利用distance_of_time_in_words

如果你总是只说7天,那么为什么不把它写成一个硬编码的字符串呢?

+0

是的,我同意这是一个很好的解决方案(+1),但是在我的情况下,我不想指定确切的日期和时间。把它想象成需要验证的文件,并且当该文件将被验证(下个月可能发生),然后计算7.days;所以我已经在数据库中保留了''7 days'',从我解析到'7.days',所以我可以说例如:'Document.last.expiery_string#=>“7天”但如果将来我会介绍翻译,我还想说'7.dni“(斯洛伐克语lang),”7 dagen“(德朗)... – equivalent8 2013-03-11 10:14:38

+1

如果是这样的话,我会建议添加一列将持有单位和其他,我会指出单位大小。根据单位大小和编号使用翻译保持不变。我可能不完全理解你的用例,但是这可以让你有7天或1个月或其他任何东西。如果你想要1个月和4天,这当然会下降。这可能不是你的问题。希望这可以帮助。 – Robert 2013-03-11 14:26:31