我在routes.rb文件中有以下代码:
get 'page/contact_us(/:year(/:month))'=>'page#contact_us', :as => 'contact_us'
这个想法是在网址中输入年份和月份是可选的。但每当我试着去地址时:
localhost:3000/page/contact_us
我收到错误。只有当我进入一年零一个月时我才会收到错误。例如,
localhost:3000/page/contact_us/2014/11
作品!
Rails告诉我错误发生在contact_us.html.erb文件中。错误行是:
<%=contact_us(@month,@year).html_safe%>
contact_us(月,年)函数在帮助文件中定义 - page_helper.rb
这个想法是通常在上面传递2个参数(在url中),但有时可以在url中传递1个参数或不传递参数。当传递的参数少于2时,我收到错误。
请帮忙!我使用的是rails 4.1.8和Rubymine
答案 0 :(得分:0)
您的无效日期错误来自您在评论中包含指向您的链接的日历方法。你有:
def calendar(month, year)
current_date = Date.new(year, month, 1)
...
问题是,如果月份或年份为零,则基本上是这样做的(在这种情况下,假设两者都是零):
current_date = Date.new(nil, nil, 1)
只需运行rails console并尝试:你得到这个错误 - TypeError:没有从nil到整数的隐式转换。
所以问题不在于您之前的网址。您可以添加这样的一些行来修复该错误:
def calendar(month, year)
month ||= 1
year ||= 1900
current_date = Date.new(year, month, 1)
...
...但是你必须跟踪那些不正确日期的事实,以便它们不会在网址中传递,无论发生在哪里。