我将把路线定义为:
resources :books do
resources :reviews, only: [:new, :create, :index]
end
resources :films do
resources :reviews, only: [:new, :create, :index]
end
这将创建路由为:
books/:book_id/reviews
films/:film_id/reviews
这是定义
nested resources
. 更重要的是,它与
Rails polymorphic route helpers
.
如果需要,可以使用路由问题来干燥它。
concern :reviewable do
resources :reviews, only: [:new, :create, :index]
end
resources :books, concerns: :reviewable
resources :films, concerns: :reviewable
它给你命名的路线助手
book_reviews_path(@book)
和
film_reviews_path(@film)
. 您还可以使用多态路由帮助器:
<%= link_to "Reviews for #{@reviewable.title}" [@reviewable, :reviews] %>
...
<%= form_for([@reviewable, @reviewable.review.new]) do %>
...
redirect_to [@reviewable, :reviews], notice: 'Review created'