検索機能の実装
補足カリキュラムにあったransackを使って、検索ページを実装中。
補足カリキュラムだと今の使用に会っていなくてよくわからんから、
ransackを検索して、自分のしたいことに合うようなものを探してみることに
・_eqというヘルパーメソッドを使うと同じ名前のものを引っ張り出す。
・_contというヘルパーメソッドを使うとそれを持っているやつを引っ張り出す。
他にも今後使えそうなのがある。今回は使わないけど使えそう
いざ、実装するが、中間テーブル先の名前を引っ張り出す方法とかが怪しいので、中間テーブル先の呼び出しとかカリキュラムで確認してみるが、少し勝手が違うのかうまく行かない
とりあえず検索してみると
似たようなことをしているサイト様
[Rails]ransackを利用した色々な検索フォーム作成方法まとめ - Qiita
があったのでそれを参考に進行。
カリキュラムと同じような呼び出し方をしていたので、
カリキュラムであったことを補完しつつも進めることができた。
しかし、
collection.selectのところで相違がある。
カリキュラムにそって作った今の自分の設定だと
1つ目が--に設定されているから、検索するときにおかしくなってしまう。
例えば
カテゴリーの検索はかけなくていいと思ってカテゴリーを--にしておくと
今のままだとカテゴリーは1で検索をかけてしまう
カテゴリー1の--で登録しているitemなんてないから、検索に何もヒットしない。
(と予想している。)
要はid1だけ表示しないようにしたい。
・そういったid1だけ除く方法を探す
・モデルを指定しているところで、モデルの中身のような配列を打ち込む
が、解決策として考えられる。
allで取得しているから、それ以外にすればいい
すぐ出てきたのはfind
指定しているカテゴリーは確かにこちらが指定しているもので変更はない。
だからこれでもできる
⇨仕様変更の際に気が付きにくい
モデル 抜き出し とかで検索していたら
find,とかwhereがあって、whereはカリキュラムで使ったと思い確認。
1 |
モデル.where('検索対象となるカラムを含む条件式')
|
これかと思うんだけど。なんかエラーを吐く。
undefined method `keys'
キー検索がうまくいっていないみたい
調べてみると
使用例にwhereがいない
元がハッシュなのがいけなさそうだが、、
ひとまず、進まないので、findで実装することに
activehashで実装している以上、変更はないデータなので、
いいちゃいいが、これからはそうはいかんはず。
ともかく表示はできたが、検索をできるようにしなければいけない。
早速、searchのviewファイルをいじって表示するように変えてみる。
先程の
[Rails]ransackを利用した色々な検索フォーム作成方法まとめ - Qiita
のファイルを参考に作ってみたが
SyntaxErrorが出る。
参考サイトはerbではなく、slim。それが原因かと思い、
erbとslimの違いを確認しにいく。
どうやら、
<% if flash.notice.present? %>
が
- flash.notice.present?
になるらしい。
表示はできたが、
表示が思ってたんと違う。
思ってたんのは
検索条件に引っかかる商品のデータを全て返す
今のは
検索条件に引っかかる文字を返す
になっている。
searchの条件式がおかしいので、今のファイルをカリキュラムと同じような条件分岐にできないか検討する
カリキュラムはresultに全部入れてresultから結果を出力している。
今のやつもitemsだけど同じように入れているように見える。
とりあえずエラーを吐かずに、searchにいけた
名前は問題ないように見えるが、
他が全く機能していない。
カテゴリーをメンズにしても、その他のものがかえってきている。
permitかけていたのを忘れていた。
ことごとくpermitを記述したところ、
うまくいった!
全部行くか一応試そうと思っていたら
タグ検索がうまくいっていない。
中間テーブルを解しているからか、、
ヘルパーメソッドをeqに変えたらうまくいった。
inの使い方がおかしかったのかな
とりあえず。これで検索機能もできた。