ruby-on-rails - 如何返回具有任何列匹配输入的任何行的任何记录
问题描述
我想一次搜索多个列。例如,给定一个关键字apple
,我想知道它是否包含在title
, description
, 中tag
。目前我可以从列中搜索并返回记录,我想搜索所有列。
我在我的控制器类中试过这个
def search
keyword = params[:input]
task = Task.where("title LIKE ?", "%#{keyword}%", " OR priority LIKE ?", "%#{keyword}%")
@tasks = task.order(sort_column + ' ' + sort_direction)
end
这是我的 ActiveRecord:
class CreateTasks < ActiveRecord::Migration[6.1]
def change
create_table :tasks do |t|
t.string :title
t.text :body
t.datetime :due
t.integer :priority
t.text :tag
t.timestamps
end
end
end
我的模型类 Task < ApplicationRecord enum priority: [:High, :Medium, :Low]
validates :title, presence: true
validates :priority, presence: true
validates :due, presence: true
end
编辑:添加我的模型
解决方案
where
需要一个条件和多个参数。这意味着 SQL 语句不能分成多个段(作为列表或作为哈希)。
改变
task = Task.where("title LIKE ?", "%#{keyword}%", " OR priority LIKE ?", "%#{keyword}%")
到
task = Task.where("title LIKE ? OR priority LIKE ?", "%#{keyword}%", "%#{keyword}%")
或者
task = Task.where("title LIKE :q OR priority LIKE :q", q: "%#{keyword}%")
有关查询界面,请参阅Rails 指南。
推荐阅读
- java - 在 Android Studio 中使用匹配约束时,有没有办法指定 ImageView 的比例?
- javascript - 信息在 Redux 商店提供之前被渲染?
- python - 如何在Python中将可变数量的字典组合成一个字典?
- quasar-framework - 如何使类星体中的 q-input 分量更小?
- regex - 使用 Google Sheets Re2 正则表达式语法提取匹配地址
- linux - 附加两个 TXT 文件的 Linux 命令
- c# - .NET core 5.0 脚手架登录页面显示“需要 returnUrl 字段”(Blazor 服务器端)
- ios - .append 更改 Swift 数组中添加的元素
- javascript - 为什么这种 Javascript 数据类型(看起来像一个对象)似乎有某种用于识别它的键?
- jsf - 无法解析文档“jndi:/server/WebApplication2/WEB-INF/faces-config.xml”:null