2015-07-29 3 views
0

Я нахожусь в процессе создания форума, и потоки настраиваются и не видят проблем. Пока вы пытаетесь создать комментарии в потоке, я, похоже, путаюсь с тем, как настроить маршруты. Обычно я знаю людей, вложенные маршруты:Вложенные маршруты комментариев без использования ресурсов

resources :threads do 
    resources :comments 
end 

Хотя разница мои маршруты не использовать метод ресурсов, как я их установки по отдельности:

get '/thread' => 'threads#discussion' 
post '/create_thread' => 'threads#create' 
get '/create_thread' => 'threads#new', :as => :new_thread 
get '/threads/:id' => 'threads#show', :as => :thread_show 
get 'threads/edit/:id' => 'threads#edit', :as => :edit_thread 
put '/threads/edit/:id' => 'threads#update', :as => :update_thread 
delete 'threads/:id' => 'threads#destroy' 

Тема/темы заменило фактическое местонахождение имя

Есть ли способ разместить вложенные маршруты для комментариев в каждой теме? Я дал соответствующие ассоциации для каждой модели (Пользователи, темы, комментарии) и добавил user_id, thread_id в модель комментариев.

Если у вас есть какие-либо сведения о правильном способе настройки маршрутов для комментариев или сведений о статье, перечислите их здесь.

Большое вам спасибо!

EDIT

Комментарии будут размещены непосредственно на страницу резьбы и не новую страницу.

Джо

+0

Используйте находчивые маршруты. Нет причин для этого, и это избавит вас от многих головных болей. –

+0

Я просто не был уверен, были ли находчивые маршруты похожими на эшафот. Это вариант, но всегда лучший способ пойти? –

+2

Есть моменты, когда вам может потребоваться вручную определить маршрут, например. 'get' в дополнение к вашим находчивым маршрутам, но все маршруты, которые вы разместили, соответствуют прямым маршрутам, которые' resources' автоматически определят для вас, поэтому это самый лучший способ в вашем случае. –

ответ

1

Вы можете сделать вложенные маршруты "вручную", как так:

get '/threads/:thread_id/comments/new' => 'comments#new' 
get '/threads/:thread_id/comments/:id' => 'comments#show' 

И new действие CommentsController может сделать что-то вроде:

def new 
    @thread = Thread.find(params[:thread_id]) 
    @comment = @thread.comments.build 
end 

Однако, я полностью согласен с Jordan's advice above ; ваши маршруты немного грязные, а не полностью RESTful, и было бы намного проще выразить через находчивую маршрутизацию.

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