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

Ruby on rails 如何使用id进行搜索,但在React中的url链接中使用slug,ruby-on-rails,reactjs,slug,Ruby On Rails,Reactjs,Slug,我正在使用Rails API获取React中的帖子。在这些信息中,我得到了一个主键和一个slug(我想用于URL) 这是Post.js中的一个示例API调用 axios .get(`/api/posts/${params.postId}` 例如,post id为1,而slug为(this-is-a-slug)。 我想能够搜索使用的id和有URL被删除 /post/this-is-a-slug而不是post/1 这是Routes.js中的当前路由 <Route path

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

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

axios
    .get(`/api/posts/${params.postId}`
例如,post id为1,而slug为(this-is-a-slug)。 我想能够搜索使用的id和有URL被删除

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

这是Routes.js中的当前路由

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

我知道使用主Id比使用字符串搜索要快,所以如果我可以使用Id搜索,但在标题中显示slug就更好了


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

我最终使用FriendlyID gem来实现Rails。它使slug实现变得非常简单


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

将slug param添加到routes,以通过相应的slug访问post,如下所示

Rails.application.routes.draw do
 resources :posts, param: :slug
end
axios.get(`/api/posts/${params.slug}`, { params: {id: `${params.postId}`})
在参数中调用API send Post id以查找id如下的帖子时

Rails.application.routes.draw do
 resources :posts, param: :slug
end
axios.get(`/api/posts/${params.slug}`, { params: {id: `${params.postId}`})
请点击以下链接了解更多信息


当心,我不知道关于
slug
:)所以,您从后端收到一个响应,它有一个
id
和一个
slug
对吗?那你当然可以用<代码>:postId只是一个名称,它可以是任何东西。传递给
链接
组件的内容与此参数匹配。仅此而已。如果你通过
id
它将是
id
,如果你通过
slug
它将是
slug
。比如,如果你可以选择这个并在组件中使用,然后使用它。关于哪些id可以实际获取的信息来自哪里?我有一个帖子索引页面,其中包含所有帖子的JSON信息,包括id。只需使用slug搜索,速度差异可能可以忽略不计。看看FriendlyID gem for Rails,我认为它可以帮助您实现Slug