Как я могу сделать мои собственные помощники URL в рельсах? - PullRequest
0 голосов
/ 21 ноября 2018

Мне бы хотелось, чтобы этот пользовательский помощник по URL был доступен из контроллеров, представлений, тестов ... Завершая как _url, так и _path.Также он должен иметь возможность добавлять параметры в конце в качестве помощника по URL.

def reviews(reviewable)
  "/reviews/#{reviewable.class}/#{reviewable.id}"
end
reviews_url Book.find(1) # /reviews/Book/1
reviews_path Film.find(3) # /reviews/Film/3

Review.reviewable является полиморфным.

config / маршруты

get "reviews/:reviewable_type/:reviewable_id" => "reviews#index"

1 Ответ

0 голосов
/ 21 ноября 2018

Я бы просто определил маршруты как:

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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...