Я хочу выполнять поиск по нескольким столбцам одновременно. Например, задав ключевое слово 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

Моя модель class Task < ApplicationRecord enum priority: [:High, :Medium, :Low]

  validates :title, presence: true
  validates :priority, presence: true
  validates :due, presence: true

end

редактирование: добавить мою модель

Peter

Ответов: 1

Ответы (1)

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 об интерфейсе запросов.

2022 WebDevInsider