Синтаксис Rails route.rb

Я искал и искал, и я не могу найти страницу, которая разъясняет синтаксис route.rb в Rails 3. Есть рекомендации, обзоры, даже расширенные примеры, но почему нет страницы, которая разъясняет точный синтаксис каждого ключевого слова ?? Эта страница

http://www.engineyard.com/blog/2010/the-lowdown-on-routes-in-rails-3/

содержит много расширенных примеров, но не требует времени для обсуждения поведения всех приведенных примеров. Я был бы признателен, если бы кто-нибудь мог указать мне на страницу, которая разбивает синтаксис route.rb.

Вот проблема, которую я пытаюсь решить. У меня две модели модель А и модель Б. Отношения: модельA имеет_много_моделейB, а модельB принадлежит моделиA. Я создал контроллер для modelB в пространстве имен modelA. Итак, в моей папке приложения rails у меня есть

app/controllers/modelA_controller.rb
app/controllers/modelA/modelB_controller.rb

Я хочу, чтобы мои маршруты были такими:

http://localhost:3000/modelA/:modelA_id/modelB/  [index]
http://localhost:3000/modelA/:modelA_id/modelB/:modelB_id  [show]
etc.

Я попробовал следующее в route.rb, и ничего из этого не работает:

resources :modelA do
  resources :modelB
end
--
resources :modelA do
  member do
    resources :modelB
  end
end
--
namespace :modelA do
  resources :modelB
end
--
match '/modelA/:modelA_id/modelB/action', :to => '/modelA/modelB#action'

Я знаю, что некоторые вещи, которые я пробовал, явно неверны, но когда вы потратили 2 дня на одну проблему, все пойдет!


person pvenky    schedule 09.01.2012    source источник
comment
Вы пробовали направляющие рельсов при маршрутизации? guides.rubyonrails.org/routing.html   -  person leonardoborges    schedule 09.01.2012


Ответы (1)


Причина, по которой ни у кого нет «полного» руководства по синтаксису маршрутизации, заключается в том, что оно довольно гибкое, поэтому вы, вероятно, могли бы написать несколько глав только на эту тему. Однако я бы рекомендовал: http://guides.rubyonrails.org/routing.html

Судя по вашему вопросу, похоже, что вы размещаете пространство имен modelB под modelA, но вы также хотите, чтобы id для modelA находилось внутри самого маршрута.

Итак, если ваш ModelBController выглядит примерно так:

class ModelA::ModelBController < ApplicationController
  # controller code here
end

то вы можете просто сделать:

resources :modelA do
  resources :modelB, :module => :modelA
end

Однако вы уверены, что хотите использовать пространство имен контроллера таким образом? Если вам просто нужны вложенные ресурсы, такие как типичное отношение has_many, вам не нужно размещать пространство имен modelB под modelA.

Вместо этого у вас будет:

/app
  /controllers
    /modelA
      # some files
    /modelB
      # some files

И ваш контроллер modelB будет:

class ModelBController < ApplicationController
  # controller code here
end

Тогда вы могли бы сделать

resources :modelA do
  resources :modelB
end
person iwasrobbed    schedule 09.01.2012
comment
Спасибо!! Я действительно не создавал модель B под моделью A намеренно. Я пытался понять, как вложить ресурсы, чтобы http://myserver/modelB был недоступен и был доступен только через http://myserver/modelA/:modelA_id/modelB, и где-то кто-то рекомендовал использовать rails generate controller modelA/modelB. Теперь я понимаю, что должен достичь своей первоначальной цели, используя маршруты, а не область действия контроллеров. Можно сказать я новичок. Тем не менее, в какой ситуации рекомендуется определение объема?? - person pvenky; 09.01.2012
comment
Такое пространство имен для контроллеров больше предназначено для их организации и является просто вопросом предпочтений. Это просто немного усложняет маршрутизацию, которая вам, вероятно, сейчас не нужна. Я бы рекомендовал придерживаться простого маршрута вложенных ресурсов. - person iwasrobbed; 09.01.2012