Как мне искать с помощью идентификатора, но использовать слаг в URL-ссылке в React - PullRequest
0 голосов
/ 26 августа 2018

Я получаю свои сообщения в React, используя выборку из моего Rails API. В этой информации я получаю первичный ключ и слаг (который я хотел бы использовать для URL).

Это пример вызова API в Post.js

axios
    .get(`/api/posts/${params.postId}`

Например, для идентификатора записи, равного 1, и слаг, который является (это-с-слаг). Я хотел бы иметь возможность выполнять поиск по идентификатору и иметь URL-адрес

/ post / this-is-a-slug вместо post / 1

Это текущий маршрут в Routes.js

      <Route path={"/post/:postId"} exact strict component={PostShow} />

Я знаю, что использование первичных идентификаторов быстрее, чем использование строк для поиска, поэтому было бы неплохо, если бы я мог выполнять поиск по идентификаторам, но показывал слагов в заголовке.

Что мне нужно сделать, чтобы заставить это работать? Нужно ли создавать модель слагов с идентификатором слагов, а затем ссылаться на идентификатор поста. Я просто немного смущен. Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Сначала вам нужно добавить атрибут slug в вашу модель и сгенерировать slug на основе вашего интереса (используя SecureRandom или строку). Напишите before_action (before_create), чтобы добавить слаг в запись.

Добавьте параметр slug в маршруты для доступа к сообщению через соответствующий slug, как показано ниже.

Rails.application.routes.draw do
 resources :posts, param: :slug
end

При вызове API отправьте идентификатор поста в параметрах, чтобы найти пост с идентификатором, как показано ниже.

axios.get(`/api/posts/${params.slug}`, { params: {id: `${params.postId}`})

Для получения дополнительной информации перейдите по ссылке ниже.

https://hackernoon.com/using-custom-slugs-for-rails-urls-500eb3f58f3c?gi=ec1178bf28d

0 голосов
/ 26 августа 2018

В итоге я использовал FriendlyID gem для Rails. Это сделало реализацию slug очень простой.

https://github.com/norman/friendly_id

...