2015-04-24 2 views
1

У меня есть маршрут, сконфигурированные как это:Лучший способ построения URLs

get "calendar/:year/:month" => "calendar#month", as: :calendar_month 

Для создания ссылки на «следующий» месяц и «предыдущий» месяц, это то, что вам нужно использовать в шаблоне:

<%= link_to "Next", calendar_month_path(year: @date.next_month.year, month: @date.next_month.month) %> 

или немного проще:

<%= link_to "Previous", calendar_month_path(@date.prev_month.year, @date.prev_month.month) %> 

Оба чувствуют себя немного многословны.

Есть ли способ, чтобы воспользоваться, что @date.prev_month/@date.next_month возвращает объект (Date), который имеет методы, которые отвечают определены в маршрутном Params (:year, :month)?

Нечто похожее на:

<%= link_to "Previous", calendar_month_path(@date.prev_month) %> 

Было бы идеальным решением, но он не работает.

Как вы справляетесь с подобными ситуациями?

Благодарим за любые советы!

ответ

2

Вы всегда можете добавить метод в ваших помощников, чтобы преобразовать дату в calendar_month_path:

def path_for_date(d) 
    calendar_month_path(d.year, d.month) 
end 

Это означает, что ваши ссылки являются:

link_to("Previous", path_for_date(@date.prev_month) 
link_to("Next", path_for_date(@date.next_month) 

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