mysql - 像搜索查询一样连接字段的 Rails

标签 mysql ruby-on-rails activerecord

我正在尝试在我的一个 Active Record 模型上创建一个搜索方法。

我希望用户能够在数据库中搜索记录。

我知道我可以这样做:Model.where('field like ?', "%#{query}%')

但这不仅仅是一个字段,它是两个字段(名字和姓氏)。但我不想单独搜索它们,我想连接名字和姓氏并搜索连接字段类似于搜索查询的位置。

这可以像连接 SQL 字段那样用 Active Record 完成吗?什么是最佳解决方案?

最佳答案

在您的模型中创建一个类方法,如下所示:

def self.search_by_full_name(query)
  where("CONCAT_WS(' ', first_name, last_name) LIKE ?", "%#{query}%")
end

但在 Rails 中,在这种情况下更常见的是声明一个作用域而不是一个类方法,像这样:

scope :search_by_full_name ->(query) { where("CONCAT_WS(' ', first_name, last_name) LIKE ?", "%#{query}%") }

关于mysql - 像搜索查询一样连接字段的 Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28946686/

相关文章:

mysql - MySQL Replication Server 可以启用日志查询吗?

ruby-on-rails - 在 Model.calculate 方法中使用属性?

php - Yii2:如何检查 activeRecord 模型是否为空

php - 将旧的 sql 代码替换为 pdo 后出现多个错误

mysql - 查询 int 值并提取日期范围

php - 在对数据库的其他调用中使用返回的ajax ID

ruby-on-rails - 用于操作现有 PDF 的 Ruby 库

ruby-on-rails - 如何检测用于 Rails 应用程序的服务器(thin、puma、passenger 等)?

mysql - ActiveRecord 迁移失败并显示 "version is defined by Active Record"

ruby-on-rails - 在Rails查询中包含LIKE子句的最佳方法是什么?