使用关注点时,根据父资源设置范围

时间:2015-02-03 12:29:38

标签: ruby-on-rails ruby ruby-on-rails-4 routes

我很好奇,有没有办法在Rails中使用问题时根据父资源设置嵌套资源的范围?

concern :commentable do
  scope module: ??? do # either :posts or :messages
    resources :comments
  end
end

resources :messages, concerns: :commentable
resources :posts, concerns: :commentable

我希望我的路线像这样:

Path                                  Controller
/messages/:message_id/comments/:id    messages/comments#show
/posts/:post_id/comments/:id          posts/comments#show

但我也想使用关注点来减少重复。

谢谢!

3 个答案:

答案 0 :(得分:1)

结果方法concerns可以采用选项的哈希值。

concern :commentable do |options|
  scope module: options[:module] do
    resources :comments
  end
end

resources :messages do 
  concerns :commentable, module: :messages
end

resources :posts do 
  concerns :commentable, module: :posts
end

答案 1 :(得分:1)

我使用选项哈希开始使用您的解决方案,但事实证明我真的非常需要这种模式,所以我为该特定情况制定了另一种解决方案:

concern :archivable do
  scope module: parent_resource.plural do
    resources :archiving, only: [:create, :destroy]
  end    
end

...
resources :messages , concerns: [ :archivable ]
resources :users , concerns: [ :archivable ]

答案 2 :(得分:0)

您可以使用Rails Polymorphism来适应comment可以belong_to任何其他模型的情况...... postvideo,{{ 1}}等等

精彩Railscasts .....值得关注。