Rails路由 - 可选参数不起作用

时间:2014-11-20 02:25:07

标签: ruby-on-rails ruby rubymine

我在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

1 个答案:

答案 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)
  ...

...但是你必须跟踪那些不正确日期的事实,以便它们不会在网址中传递,无论发生在哪里。