7gg游戏私服论坛

 找回密码
 加入7GG
查看: 112|回复: 0
打印 上一主题 下一主题

使用标签解放您在 Rails 中的搜索

[复制链接]
跳转到指定楼层
楼主
发表于 2024-3-18 11:43:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
搜索是任何网站的重要组成部分,对于以内容为中心的网站更是如此。一个好的搜索系统是一个能够快速提供准确结果的系统。搜索和过滤基本上是相同的,具体取决于您如何看待它。在本文中,我将把搜索和过滤视为同一类功能。 我们使用的工具有许多现有的方法可以实现搜索,例如PostgreSQL 全文搜索,您可以在 Rails 中使用它。然而今天,我们将了解如何使用 PostgreSQL 在 Rails 应用程序中实现基于标签的过滤。 让我们开始吧。 关于实施 让我们看看基于标签的实现是如何工作的。假设我们有一个名为的表companies,它具有以下关系关联等列。 假设我们有一个公司页面,该页面上有过滤器。我们现在想要过滤位于某个国家/地区的所有公司。我们可以通过连接表格并根据提供的国家/地区 ID 进行过滤来实现这一点,非常简单。但是,如果过滤器组合在一起并变得更加复杂,情况会怎样呢? 例如,我们想要以下过滤它仍然是可以实现的,但是查询会被扩展,而且很可能会变得有点难看。真正的问题是为用户提供过滤选项。

一种方法是为我们允许用户执行的每个过滤器放置相关元素(文本框和选择),当我们想要包含越来越多的过滤器时,这会成为一个问题。如果我们想要对信息进行 50 种不同类型的过滤器,那么每个过滤器使用一个元素将不是一个美好的景象。另外,在查询部分,考虑一下来自 10 个不同方向的公司的关系,每个方向都嵌套自己的一组关联?我相信你能看到事情变 比利时手机号码数据 得有多快变得丑陋。这是标记解决方案更好的答案。 在基于标签的实现中,我们基本上将tag具有数组数据类型的列添加到要在其中执行过滤的表中。在我们的例子中,就是这个companies表。该列由一组通用唯一标识符 (UUID) 组成,这些标识符对应于与记录相关的标签的 ID。我们将有一个名为 的单独表,tags由标签id、name和组成type。现在,搜索和过滤就像在表格中搜索tags、查找 UUID,然后根据这些标签 ID 过滤公司一样简单。



让我们借助一个示例来实现这一点。 Rails 应用程序示例 我们的 Rails 应用程序将有五个表 公司 城市 状态 国家 标签 首先创建 Rails 应用程序以及必要的模型: rails new tag-example -d postgresql 为了使标签实现发挥最佳效果,我们将坚持使用 UUID 作为所有表中的主键,因此让我们创建一个迁移来启用 PostgreSQL 的uuid-ossp扩展生成迁移文件后,在文件中添加以下命令: enable_extension "uuid-ossp" 运行迁移: rake db:create && rake db:migrate 创建我们的模型,从公司开始: rails g scaffold companies name founding_year:integer city_id uuid 正如我上面提到的,我们需要将该id字段维护为表的 UUID。转到create_companies迁移文件并修改该create_table行以指定该id列应该是uuid. PostgreSQL 将负责自动生成 UUID。tags另外,添加一行以向表中添加一列companies,因为将其包含在脚手架中将使其显示给用户

您需要登录后才可以回帖 登录 | 加入7GG

本版积分规则

手机版|小黑屋|Archiver|7gg私服论坛

GMT+8, 2024-11-7 18:05 , Processed in 1.482003 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表