Я бы просто определил маршруты как:
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
Это обычный способ RESTful для определения вложенных ресурсов .И что еще более важно, он работает с помощниками полиморфного маршрута Rails .
Вы можете использовать проблемы маршрутизации для СУШКИ, если это необходимо.
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'