如何使用 id 进行搜索,但在 React 的 url 链接中使用 slug



我正在使用对我的 Rails API 的获取在 React 中获取我的帖子。在此信息中,我得到了一个主键和一个 slug(我想将其用于 URL(。

这是 Post 中的一个示例 API 调用.js

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

例如,对于 1 的帖子 ID 和 (this-is-a-slug( 的 slug。 我希望能够使用 id 进行搜索并让 URL

/post/this-is-a-slug 而不是 post/1

这是路由中的当前路由.js

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

我知道使用主 ID 比使用字符串搜索更快,所以如果我可以使用 id 进行搜索但在标题中显示 slug,那就太好了。

我需要做什么才能让它工作?我是否需要创建一个带有 slug id 的 slug 模型,然后引用该 post id。我只是有点困惑。谢谢你帮助我!

我最终将FriendlyID gem用于Rails。它使 slug 实现变得非常容易。

https://github.com/norman/friendly_id

首先,您需要向模型添加一个 slug 属性,并根据自己的兴趣生成一个 slug(使用 SecureRandom 或字符串(。 编写一个 before_action(before_create( 以将 slug 添加到记录中。

将 slug 参数添加到路由中,以通过其相应的 slug 访问帖子,如下所示。

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

调用 API 时,在参数中发送帖子 ID 以查找具有如下所示 id 的帖子。

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

点击以下链接了解更多信息。

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

最新更新