使用共享模型嵌套路径的轨道方式是什么?

时间:2016-01-29 14:45:21

标签: ruby-on-rails

我有以下模特:

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方式”吗? (自定义路线是我能提出的唯一想法)

编辑:添加了缺失的关联。

2 个答案:

答案 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

如果你不重复自己,就这样。