Вложенные маршруты Rails-3.1, создающие одно и то же действие и контроллер, базовый недостаток знаний - PullRequest
0 голосов
/ 04 декабря 2011

Выполнение следующей конфигурации маршрутов:

resources :cadeiras do
resources :professores 
end

resources :cadeiras do 
resources  :fichas
end

resources :fichas do
resources :exercicios
end

сгенерирует мне 2 разные ссылки на один и тот же контроллер и действие, при запуске рейк-маршрутов может получиться что-то вроде:

 fichas GET    /fichas(.:format)  {:action=>"index", :controller=>"fichas"}
 cadeira_fichas GET    /cadeiras/:cadeira_id/fichas(.:format)    {:action=>"index", :controller=>"fichas"}

Первое действие будет ссылаться на все «фичас», а второе - только «фичас» и «кадейрас», как можно отличить два действия?

Я бы хотел избежать трехуровневых проблем вложенности, как описано здесь: http://weblog.jamisbuck.org/2007/2/5/nesting-resources

Спасибо за ваше время

1 Ответ

1 голос
/ 04 декабря 2011

Если я правильно понимаю ваш вопрос, ответ: «Вы не различаете их»:

Точно такое же действие выполняется с контроллером, отображая точно такой же вид.Разница состоит в том, что коллекция 'fichas' отправляется в представление: - в первом случае все виды fichas доступны в представлении; - во втором случае в разделе доступны только 'fichas', относящиеся к 'cadeira'.представление (например, /cadeira/1/fichas будет отображать только 'fichas', относящиеся к 'cadeira' с id 1)

Чтобы определить, какие записи показывать (например, в представлении индекса), вы можете сделать что-то вродеthis:

unless cadeira_id = params[:cadeira_id]
  @fichas = Ficha.all
else
  @fichas = Cadeira.find(cadeira_id).fichas
end

Остальное зависит от вида: он должен отображать фичас так же, вы просто выбрали, какие записи фактически доступны для него.

...