Ruby on rails 视图内部的Ruby行为与IRB不同
下面是通过交互式Ruby解释器运行以下代码时发生的情况:Ruby on rails 视图内部的Ruby行为与IRB不同,ruby-on-rails,ruby,Ruby On Rails,Ruby,下面是通过交互式Ruby解释器运行以下代码时发生的情况: 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
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__) %>
为什么相同的代码片段会在视图中导致500错误
@event.start\u date
不是字符串,需要第一个参数是string
在您的irb
中,您将字符串2015-03-22
提供给Date.parse
,该操作成功。但是在您的erb
中,它不是字符串
,可能是日期
类型
因此,在erb
中的strftime
上使用@event.start\u date
,如下所示:
<% month_and_year = @event.start_date.strftime("%B %Y") %>
@event.start\u date
不是字符串,需要第一个参数是字符串
在您的irb
中,您将字符串2015-03-22
提供给Date.parse
,该操作成功。但是在您的erb
中,它不是字符串
,可能是日期
类型
因此,在erb
中的strftime
上使用@event.start\u date
,如下所示:
<% month_and_year = @event.start_date.strftime("%B %Y") %>
@event.start\u date
不是字符串,需要第一个参数是字符串
在您的irb
中,您将字符串2015-03-22
提供给Date.parse
,该操作成功。但是在您的erb
中,它不是字符串
,可能是日期
类型
因此,在erb
中的strftime
上使用@event.start\u date
,如下所示:
<% month_and_year = @event.start_date.strftime("%B %Y") %>
@event.start\u date
不是字符串,需要第一个参数是字符串
在您的irb
中,您将字符串2015-03-22
提供给Date.parse
,该操作成功。但是在您的erb
中,它不是字符串
,可能是日期
类型
因此,在erb
中的strftime
上使用@event.start\u date
,如下所示:
<% month_and_year = @event.start_date.strftime("%B %Y") %>
在rails视图中,您可以避免使用strftime
并使用I18n
帮助程序来呈现正确的格式,有关更多信息,请参见I18n.localize(@event.start\u date,format::month\u year)
在rails视图中定义month\u year
的config/locales/*.yml
可以避免使用strftime
并使用I18n
帮助程序呈现正确的格式,有关更多信息,请参见I18n.localize(@event.start\u date,format::month\u year)
在rails视图中定义month\u year
的config/locales/*.yml
可以避免使用strftime
并使用I18n
帮助程序呈现正确的格式,有关更多信息,请参见I18n.localize(@event.start\u date,format::month\u year)
在rails视图中定义month\u year
的config/locales/*.yml
可以避免使用strftime
并使用I18n
帮助程序呈现正确的格式,有关更多信息,请参见I18n.localize(@event.start\u date,format::month\u year)
在config/locales/*.yml中定义month\u year
是的,问题是类型不兼容。你的建议奏效了。是的,问题是不兼容的类型。你的建议奏效了。是的,问题是不兼容的类型。你的建议奏效了。是的,问题是不兼容的类型。你的建议奏效了。