псевдо-сложные маршруты в рельсах 3 - PullRequest
1 голос
/ 16 января 2011

Я пытаюсь сделать несколько хороших простых маршрутов в Rails 3 с 2-мя пользовательскими сопоставлениями, которые предполагают, что root: id будет городом, а: city_id /: id будет местом ... кажется, что работает нормально, за исключением пытаюсь редактировать.

Т.е..

root_url/countries/france
root_url/paris/some_place
root_url/paris

Вот мой код, чтобы быть более точным.

resources :countries do
  resources :cities
end

resources :cities do
  resources :places, :reviews
end

match ':id' => 'cities#show', :as => :city, :method => :get
match ':city_id/:id' => 'places#show', :as => :city_place, :method => :get

Кажется, что это прекрасно работает, когда я пытаюсь редактировать записи. HTML, как показано ниже:

<% form_for @city do |f| %>
<% end %>

Производит:

<form accept-charset="UTF-8" action="/kiev" class="edit_city" id="edit_city_3581" method="post">

Что бы работало, только если бы это было:

<form accept-charset="UTF-8" action="/cities/kiev" class="edit_city" id="edit_city_3581" method="post">

Я знаю, что мог бы просто предоставить более продвинутую форму form_for для явного обхода этого, но мне интересно, есть ли что-нибудь лучше, чтобы сделать в моем route.rb, чтобы сделать мою жизнь проще, чем исправлять?

Спасибо

1 Ответ

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

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

get ':id' => 'cities#show', :as => :city_shortcut
get ':city_id/:id' => 'places#show', :as => :city_place_shortcut
...