我有以下模特:
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方式”吗? (自定义路线是我能提出的唯一想法)
编辑:添加了缺失的关联。
答案 0 :(得分: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
答案 1 :(得分:0)
如果要分享嵌套路线,请使用routing concerns:
concern :commentable do
resources :comments
end
resources :boards, concerns: :commentable
resources :tasks, concerns: :commentable
如果你不重复自己,就这样。