検索用のGem。ソート機能(!)もあります。
http://qiita.com/nysalor/items/9a95d91f2b97a08b96b0
http://qiita.com/LuckOfWise/items/e020e896e71d47d0c6a4
まだまだ国内での情報少なそう(あまり使っている人がいない・・・?)ので、色々使っている過程で気付いた事をメモ。
簡単な使い方 (要約)
コントローラで、
ModelName.all
または ModelName.where(huga: :hoge)
等している箇所を
ModelName.search(params[:q]).result
、 ModelName.where(huga: :hoge).search(params[:q]).result
のようにすると使えるようです。
検索フォームのために .search
の結果の状態が必要みたいなので、
def index
@search = ModelName.search(params[:q])
@results = @q.result
end
のようにインスタンス変数に突っ込んでおくのが通例のようですね (ワンライナー的には @results = (@search = Hoge.search(params[:q]).result
とかでもアリかも。キモいかな・・・?)
sort_link 周り
ちなみに sort_link は search_form_for
等を使用していなくとも、 Huga.search(params[:q])
さえしていれば、使える模様です。
joinしたテーブルのカラムに対してのsort_link
hoges
テーブルの huga
カラムに対して sort_link
したいとして、
.includes(:hoge)
して
= sort_link @q, "hoges.huga"
とかやってみましたが、駄目でした・・・
これによると、以下のようにするといいみたいですね。
= sort_link @q, :hoge_huga
hoge
の部分はアソシエーション名になる模様。
アンダーバー区切りで書けば勝手に判断してくれる模様。素晴らしきかな !
随時気付いた部分があれば、追記していこうと思います。 (大きなものに関しては、別エントリにしていきます)