Rails字符串插值中调用date.format报错NoMethodError求助
解决Rails中Date对象调用
format方法引发的NoMethodError问题 嘿,你这是踩了Ruby Date类的一个小坑——它根本没有format这个方法!你看到的报错private method 'format' called for Wed, 20 Jul 2016:Date就是因为这个原因,咱们来快速搞定它:
核心解决方案:用strftime替代format
Ruby的Date/Time类自带的日期格式化方法是strftime,用法和你预想的format几乎一样,把代码里的format换成strftime就行:
<ul class="list-group"> <% @top_ten_cashflows.each do |transaction|%> <li class="list-group-item"> <%= "#{ transaction.date.strftime('%b') } - #{transaction.category.name} - #{transaction.amount}"%> </li> <%end%> </ul>
这里%b会输出月份的缩写(比如Jul、Aug),完全符合你想要的效果。
进阶:用Rails自带的简化格式化方式
Rails对Date/Time类做了扩展,提供了更直观的命名式格式化,比如:
- 如果你想要
Jul 20这种短格式,可以直接写transaction.date.to_s(:short) - 要是你经常需要单独的月份缩写,还可以自定义一个专属格式:
在config/initializers/date_formats.rb文件里添加:
之后在视图里就能这么用:Date::DATE_FORMATS[:month_abbr] = "%b"<%= transaction.date.to_s(:month_abbr) %>
小优化:让代码更整洁
你当前的字符串拼接写法有点冗余,也可以换成更清爽的方式:
<%= sprintf("%s - %s - %s", transaction.date.strftime('%b'), transaction.category.name, transaction.amount) %>
内容的提问来源于stack exchange,提问作者muso mwale
相关产品推荐
相关产品推荐

