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

时间:2018-08-26 01:30:00

标签: ruby-on-rails reactjs slug

我正在通过获取我的Rails API在React中发布帖子。在此信息中,我得到了一个主键和一个子段(我想将其用于URL)。

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

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

例如,对于发布ID为1的子弹(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进行搜索但在标题中显示条形符号,那将是很好的选择。

要使它正常工作,我需要做什么?我是否需要创建一个带有条形ID的条形模型,然后引用帖子ID。我只是有点困惑。感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

我最终在Rails中使用了FriendlyID gem。它使该slug实现非常容易。

https://github.com/norman/friendly_id

答案 1 :(得分:0)

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

在路径中添加子弹参数,以通过相应的子弹访问帖子,如下所示。

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