2014-11-20 4 views
0

У меня есть следующий код в моем routes.rb файле:Рельсы маршрутизации - необязательные параметры не работают

get 'page/contact_us(/:year(/:month))'=>'page#contact_us', :as => 'contact_us' 

Идея заключается в том, что ввод год и месяц в URL не являются обязательными. Но всякий раз, когда я пытаюсь перейти по адресу:

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 аргументов.

Пожалуйста, помогите! Я использую рельсы 4.1.8 и Rubymine

+0

'contact_us_path (@year)' работает для меня, а также 'contact_us_path' без аргументов. –

+1

Если 'params [: month]' и 'params [: year]' не определены (и их не будет, если вы не передадите их в URL-адресе). Тогда что вы заселяете '@ month' и' @ year'? Что произойдет в вашем коде, если '@ month' и' @ year' равны нулю? – JTG

+0

Спасибо. params [: month] и params [: year] предназначены для запросов GET. Например, что-то вроде: localhost: 3000/page/contact_us? Month = 10 & year = 2012 – raneshu

ответ

0

Ваша неверная ошибка даты исходит из метода календаря, в который вы указали ссылку на свои комментарии. У вас есть:

def calendar(month, year) 

    current_date = Date.new(year, month, 1) 
    ... 

Проблема заключается в том, что если месяц или год равен нулю, вы в основном делают это (в данном случае, если предположить, как равны нулю):

current_date = Date.new(nil, nil, 1) 

Просто запустите Рельсы консоли и попробуйте что: вы получаете эту ошибку - TypeError: нет неявного преобразования из nil в integer.

Таким образом, проблема заключается не в вашем URL-адресе, а раньше. Вы можете добавить несколько строк, как это исправить эту ошибку:

def calendar(month, year) 
    month ||= 1 
    year ||= 1900 
    current_date = Date.new(year, month, 1) 
    ... 

... но тогда вам придется следить за тем, что те не правильные даты, так что они не получают прошли в url, где бы это ни происходило.

Смежные вопросы