Как исправить дублирующийся контент FriendlyID для: id и: slug - PullRequest
0 голосов
/ 07 января 2019

FriendlyID постоянно показывает дублированный контент для обоих / slug и / 1. Другими словами, правильная страница загружается для дружественного слага (/ new-york), но она загружает то же содержимое для старого недружественного слага (/11).

Вот моя текущая конфигурация:

#config/routes.rb
resources :groups, path: ''
get 'groups/:id' => redirect("/%{id}")

#app/models/group.rb
class Group < ActiveRecord::Base
   extend FriendlyId
   friendly_id :name, use: [:slugged, :finders]
end

#app/controllers/groups_controller.rb
def show
    @group = Group.friendly.find(params[:id])
end

В качестве потенциального обходного пути я обнаружил, что установка этого в моем контроллере перенаправляет плохих слагов (/ 11) на хорошие слагов (/ new-york), но по многим причинам это кажется неправильным (маршрутизация вне маршрутов. Rb , вероятные непредвиденные последствия, комплексное решение для общей проблемы = вероятно, не правильное).

    if request.path != group_path(@group)
      return redirect_to @group, :status => :moved_permanently
    end

Как правильно сделать, чтобы FriendlyID (1) перенаправлял: id вызывал: slug или (2) просто 404 их?

1 Ответ

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

Благодаря этому фантастическому комментарию на Medium , теперь у меня есть полностью функциональное и очень элегантное решение, которое решает мою первоначальную проблему (дубликаты страниц с / new-york и / 11), а также позволяет использовать два корневых слизневые структуры высокого уровня для совместного существования.

get '/:id', to: 'groups#show', constraints: proc {|req| FriendlyId::Slug.where(sluggable_type: 'Group').pluck(:slug).include?(req.params[:id])}, as: :group
get '/:id', to: 'custom_pages#show', constraints: proc {|req| FriendlyId::Slug.where(sluggable_type: 'CustomPage').pluck(:slug).include?(req.params[:id])}, as: :custom_page
...