検索フォームの作成 その1

 

参考記事 シンプルで分かり易い

https://qiita.com/yusuko/items/cff4e46aeafbc3beecf2

 

ポイントとしては

searchアクションは普通にどっかに定義する

text_field_tagを使う。キーは:searchとかにしとく

(なんかtext_fieldではだめだよ、って記事見たことある気がする。ちなみにこれは普通にform_tag内で使ってるtext_field_tagだからね)

= form_tag(search_path,:method => 'get') do
= text_field_tag :search
= submit_tag '検索', :name => nil

 指定したパスsearch_pathでhomeコントローラーのsearchアクションとかに飛んだら(この辺は自分のアプリがそうだったって話)、そこでデータを受け取るワケだけど、その前に

モデルの方にself.メソッド(仮引数)で検索の仕方を定義しておく。

当たり前だが、モデルの方で定義してないとコントローラーで急に.searchは使えないので注意。

def self.search(search)
if search
Item.where(['name LIKE ?', "%#{search}%"])
else
Item.all
end
end

 

searchアクションに飛んだら

def search
@items = Item.search(params[:search])
end

とかでモデルで定義したように検索する。paramsで受け取ってることにちょっと注意。

あとはアクション動いた後のビューファイルを作ってそこで@インスタンスを表示するだけ。パーシャルとかにしてページの一部に表示することが多そう。普通に検索結果ページにしてもいいけど。

 

モデルで定義する曖昧検索の参考記事はこっち

https://qiita.com/seri1234/items/765423c2c46ca4114da0

ポイントは基本形が

モデル名.where( 'カラム名 like ?',  '検索したい文字列' )

であるということと。定番の含んで入ればヒットするのは

モデル名.where( 'カラム名 like ?',  '%検索したい文字列%' )

であるということ。