视图内部与IRB不同的Ruby行为

时间:2014-04-07 21:22:12

标签: ruby-on-rails ruby

以下是通过Interactive Ruby Interpreter运行以下代码时发生的情况:

start_date = '2015-03-22'
month_and_year = Date.parse(start_date).strftime("%B %Y")
puts month_and_year

输出:

March 2015  

我的一个观点中有相同的代码:

         <% require 'date' %>
         ...........
         <% logger.info(@event.start_date ) %>
         <% start_date = @event.start_date %>
Line 64: <% logger.info(__LINE__) %>
         <% month_and_year = Date.parse(start_date).strftime("%B %Y") %>
         <% logger.info(__LINE__) %>

这是日志文件输出:

2015-03-22
64
  Rendered events/_event_sidebar.html.erb (87.3ms)
  Rendered events/show.html.erb within layouts/application (545.0ms)
Completed 500 Internal Server Error in 1099ms

为什么相同的代码片段在视图中导致500错误?

1 个答案:

答案 0 :(得分:3)

@event.start_date不是字符串,Date.parse期望第一个参数为string

irb中,您正在向2015-03-22提供字符串Date.parse,并且成功了。但是在erb中,它不是string,而是Date类型。

因此,请在strftime中的@event.start_date上使用erb作为:

<% month_and_year = @event.start_date.strftime("%B %Y") %>