Создание именованного маршрута для контроллера со статическими действиями с использованием API маршрутизации Rails 3 - PullRequest
0 голосов
/ 04 января 2011

У меня есть базовый контроллер с именованными действиями, представляющими статические страницы:

class YourTripController < ApplicationController
  def when_to_visit
  end

  def booking_a_trip
  end

  ...

end

Я хочу, чтобы именованный маршрут имел доступ к таким действиям, как:

your_trip_path(:when_to_visit)

your_trip_path(:booking_a_trip)

Кажется достаточно простым, верно?Но я также хочу, чтобы в URL-адресах использовались тире, а не подчеркивания для сгенерированных путей:

example.com / your-trip / when-to-visit example.com/your-trip/booking-a-trip

Учитывая эти ограничения, как выглядят мои маршруты?

Я перепробовал много подходов, и это самый близкий к этому моменту:

  controller :your_trip, :path => 'your-trip', :as => :your_trip do
    get "when_to_visit", :path => 'when-to-visit'
    get "booking_a_trip", :path => 'booking-a-trip'
  end

Это правильно направляет меня к правильному действию, но использование помощника URL, такого как your_trip_path (: when_to_visit), приводит к:

Нет совпадений маршрута {: action => "when_to_visit",: controller => "your_trip"}

1 Ответ

1 голос
/ 04 января 2011

Совпадение URL с действием контроллера # и указание имени маршрута с помощью :as:

get "your-trip/when-to-visit" => "your_trip#when_to_visit", :as => "when_to_visit"

Также работают URL-помощники:

rails c
Loading development environment (Rails 3.0.3)
ruby-1.8.7-p302 :001 > app.when_to_visit_path
 => "/your-trip/when-to-visit"

Похоже, с помощью gem-фильтра маршрутизации возможно написать собственный фильтр маршрутов для дефисированных URL-адресов. Это, конечно, излишне для простых случаев с парой статических страниц.

Ваша версия с крошечной модификацией работает:

controller :your_trip, :path => 'your-trip', :as => :your_trip do
  get "when_to_visit", :path => 'when-to-visit', :as => :when_to_visit
  get "booking_a_trip", :path => 'booking-a-trip', :as => :booking_a_trip
end

Маршруты затем называются:

your_trip_when_to_visit
your_trip_booking_a_trip
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...