Несколько вложенных маршрутов, есть ли лучший способ сделать это? - PullRequest
0 голосов
/ 13 ноября 2009

Итак, в моем приложении rails у меня есть два ресурса (аренда и бронирование), которые принадлежат пользователю. Это код в моем rout.rb для настройки вложенных маршрутов.

  map.resources :users, :has_many => :reservations, :shallow => true
  map.resources :users, :has_many => :rentals, :shallow => true
  map.resources :rentals, :only => [:index]
  map.resources :reservations, :only => [:index]

Есть ли более совершенный способ сделать это. Я немного погуглил, но не могу найти четкого ответа.

Заранее спасибо.

1008 * -ray *

Ответы [ 3 ]

6 голосов
/ 13 ноября 2009

Ваш метод дублирует маршруты для пользователей, как вы можете увидеть, запустив rake routes. Вы можете это исправить, передав блок map.resources:

map.resources :users, :shallow => true do |user|
  user.resources :reservations
  user.resources :rentals
end

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

Если вам действительно нужны все маршруты, которые вы определили (включая не вложенные индексы аренды и бронирования), вам нужно добавить:

map.resources :rentals, :only => [:index]
map.resources :reservations, :only => [:index]

И я не знаю СУХОГО способа сделать это.

1 голос
/ 13 ноября 2009

Вкладывает два ресурса под пользователями:

  map.resources :users, :shallow => true do |users|
    users.resources :reservations, :only => :index
    users.resources :rentals, :only => :index
  end

Редактировать: Извините, забыл: мелкий вариант.

1 голос
/ 13 ноября 2009

Вы можете определить вложенные маршруты с блоками

map.resources :users, :shallow => true do |user|
  user.resources :reservations, :only => [:index]
  user.resources :rentals, :only => [:index]
end

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

Различные параметры и подробности приведены на странице API ресурсов ActionController 1007 *

...