2016-01-29 2 views
-1

У меня есть следующие модели:Каков способ маршрутизации маршрутов с общими моделями?

board.rb 
task.rb 
comment.rb 

Совет имеет много комментариев, комментарий относится к борту. Задача имеет много комментариев, комментарий принадлежит задаче. Совет имеет много задач, задача принадлежит правлению.

Каков самый чистый способ обработки маршрутов? В настоящее время она выглядит следующим образом:

resources :boards do 
    resources :tasks do 
    resources :comments 
    end 
    resources :comments 
end 

порождающий следующую змею после rake routes:

board_task_comment GET /boards/:board_id/tasks/:task_id/comments/:id(.:format) comments#show

Как бы я идти о том, чтобы его короче и чище? Есть ли способ «Rails» сделать это? (Пользовательские маршруты - единственная идея, которую я могу придумать)

EDIT: Добавлены недостающие ассоциации.

+0

Если у вас есть какие-либо комментарии и даже задание has_many комментариев, перейдите к полиморфной ассоциации, http://guides.rubyonrails.org/association_basics.html перейдите к 2.9. Thats the best practice – Guru

ответ

1

Перейти к полиморфной ассоциации

class Comment < ActiveRecord::Base 
    belongs_to :commentable, polymorphic: true 
end 

class Board < ActiveRecord::Base 
    has_many :comments, as: :commentable 
end 

class Task < ActiveRecord::Base 
    has_many :comments, as: :commentable 
end 

Маршруты

resources :boards do 
    resources :comments 
end 
resources :tasks do 
    resources :comments 
end 
+0

Я добавил отсутствующую ассоциацию, о которой ранее упоминал удаленный ответ. Ваш ответ по-прежнему применяется? (Я забыл упомянуть о том, что на доске есть несколько задач, задача принадлежит отношению к доске) – Lotix

0

Если вы собираетесь разделить вложенными маршруты использовать routing concerns:

concern :commentable do 
    resources :comments 
end 

resources :boards, concerns: :commentable 

resources :tasks, concerns: :commentable 

Таким образом, если вы не повторить сам.

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