首页 > 解决方案 > 如何返回具有任何列匹配输入的任何行的任何记录

问题描述

我想一次搜索多个列。例如,给定一个关键字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

编辑:添加我的模型

标签: ruby-on-rails

解决方案


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 指南。


推荐阅读