1

Я нахожусь в точке своего развития, что я думаю, что глубоко (> 1) вложенные ресурсы не стоят усилий.Действительно ли глубоко вложенные полиморфные ресурсы стоят усилий?

У меня есть что-то вроде этого:

resources :first-level do 
    resources :comments 
    resources :second-level do 
     resources :comments  
     resources :first-child do 
     resources :comments 
     end 
     resources :second-child do 
     resources :comments 
     end 
     resources :third-child do 
     resources :comments 
     end 
    end 
    end 

Кикер, что комментарии являются полиморфными к другим ресурсам. Мое намерение состояло в том, чтобы иметь чистые URL-адреса, такие как ~/first-level/34/comments, ~/first-level/34/second-level/56/third-level/comments и т. Д.

Проблема пока полиморфные маршруты, когда вложенные не вызывают ничего, кроме горя. Я следую примеру Ryan Bates Railscasts в качестве примера. Например, если я пытаюсь использовать polymorphic_path на первом уровне он работает хорошо, и я получаю:

polymorphic_path([@commentable, comments]) => ~/first-level/34/comments 

но тот же код на ~/first-level/34/second-level/23 терпит неудачу с:

undefined method 'second-level_comment_path' for #<#<Class:0x007fcc4acfbe58>:0x007fcc4ae73d08>, но когда я смотрю на моих маршрутах фактический имени маршрут first-level_second-level_comment. Я попытался вручную создать этот second-level_comment_path в основном псевдонимом first-level_second-level_comment, но я тоже не мог бы сделать эту работу.

Если кто-то не может указать на явную ошибку, здесь я склоняюсь к этому подходу (http://weblog.jamisbuck.org/2007/2/5/nesting-resources) и просто не разлагаю их. У меня есть стиль навигации в виде палитры, чтобы показать hiearchy, чтобы этого было достаточно, и чем больше я смотрю на него, URL-адреса становятся немного неудобными.

ответ

1

С помощью вложенных ресурсов вам нужно будет указать все родительские уровни, если вы хотите получить доступ к дочернему уровню. В противном случае Rails не будет знать, как добраться до уровня вашего ребенка. Итак, вам нужно будет использовать первый-level_second-level_comment и значения питания первого уровня и второго уровня, как это:

first-level_second-level_comments_path(@my_first_level, @my_second_level) 

окажем:

~/first-level/34/second-level/23/comments 

EDIT:

Я надеваю Посмотрите, почему вам нужно строить путь пошагово.

Вы всегда можете построить first_level комментариев пути:

first-level_comments_path(@my_first_level) 

будет оказывать

~/first-level/34/comments 

Или список всех второго уровней в пределах первого уровня: (действие индекса второго уровня для данного первого уровень)

first-level_second-levels_path(@my_first_level) 

будет оказывать

~/first-level/34/second-levels 
+0

Спасибо за подсказку. Я начал раскладывать свои ресурсы, а затем быстро обнаружил, что легче бороться с проблемами с гнездом. С данным вложенным ресурсом существует легко восстановить иерархию пути, то есть first_second_third_etc_path? –

Смежные вопросы