Rails 5 route, URL url - PullRequest
       26

Rails 5 route, URL url

0 голосов
/ 16 января 2019

У меня проблема с попыткой заставить link_to работать после изменения маршрутов в моем приложении.Это может быть простым, но я, честно говоря, не могу видеть, что просто ссылка на link_to с именем объекта не будет работать, как раньше, до изменения маршрута.

Справочная информация: я использую гем friendly_id (не уверен, что я до сих порнужно это после внесения изменений в URL вручную).Я также использую драгоценный камень Ancestory.

На передней панели приложения.У меня есть список ресурсов, который используется только для индексации и показа.Смотрите ниже маршруты, а также предыдущий рабочий маршрут.

# Front facing resources
scope "/:category_name/:category_id" do
    resources :listings, only: [:show], path: '/:title'
end
resources :listings, only: [:index]

до (работает нормально)

# Front facing resources
resources :listings, only: [:index, :show]
resources :auctions, only: [:index, :show]

Я успешно сделал вывод своего URL с результатом:

listing GET    /:category_name/:category_id/:title/:id(.:format)   listings#show

результат:

http://localhost:3000/listings/helicopter/test-one/4

Это пока подойдет.Я все еще пытаюсь определить окончательный URL.Таким образом, я могу создать список и просмотреть его, вручную введя URL-адрес в браузер.

Ошибка возникает, когда я просматриваю индексную страницу списков, и у меня есть link_to

текущий код:

<%= link_to listing.title, listing %>

Ошибка:

No route matches {:action=>"show", :controller=>"listings"}, missing required keys: [:category_id, :category_name, :id, :title]

Как мне добавить эти обязательные ключи в помощник link_to?Я пробовал много способов, но не далеко.Я предположил, что изменение только маршрута показа не слишком запутало бы ни один из предыдущих методов контроллера и что список все равно будет найден по id.

Любое направление было бы замечательно.Бесконечно благодарен.

*** ОБНОВЛЕНИЕ ****

Хорошо, перед отправкой вышесказанного я посмотрел поближе и получил его, однако я спрашиваю, есть ли более чистый способ сделать это?Это выглядит не очень «рельсовым путем».Моя конечная цель - иметь длинную SEO-дружественную ссылку, которая содержит категорию и, возможно, подкатегории.

Рабочий код:

<%= link_to listing.title, listing_path(category_name: "listings", category_id: listing.category.name, title: listing.title.parameterize, id: listing.id) %>

Результат:

http://localhost:3000/listings/Aircraft/twin-piston-jet/1

Мысли, пожалуйста ???

1 Ответ

0 голосов
/ 16 января 2019

Вы можете использовать помощников для этого https://api.rubyonrails.org/classes/ActionController/Helpers.html

приложение / хелперы / listing_helper.rb

module ListingHelper

  def listing_route(listing, category_name = "Listings")
    listing_path(category_name: listing, category_name: listing.category.name, title: listing.title.parameterize, id: listing.id)
  end

end

На твоих взглядах

<%= link_to listing.title, listing_route(listing) %>
...