やりたいこと
会社 Corporation
を会社名 name
というフィールドで全文検索したい
やるべきこと
1.全文検索インデックスを貼る
db/migrate/00000000000000_add_index_to_corporations.rb
class AddIndexToCorporations < ActiveRecord::Migration[7.0]
def up
execute 'CREATE FULLTEXT INDEX `index_corporations_on_name` ON corporations (name) WITH PARSER ngram'
end
def down
execute 'ALTER TABLE corporations DROP INDEX `index_corporations_on_name`'
end
end
WITH PARSER ngram
を指定する必要があるのでadd_index :corporations, :name, type: :fulltext
ではダメです。
2. Ransackの条件を定義します
下記のようにname_cont
を検索条件としています。
= search_form_for @query, url: search_corporations_path do |f|
= f.input :name_cont, label: false,placeholder: '社名で検索'
以下のようにモデルにScopeを追加してransackable_scopes
を使いRansackに渡してください。
models/corporation.rb
scope :name_cont, ->(name) { where('match (`name`) against (?)', name) }
def self.ransackable_scopes(_auth_object = nil)
%i[name_cont]
end