Rails 検索方法まとめ 忘備録
Rails 検索用コントローラーを作るかどうかの判断?
手順
- 全体から検索するなら、コントローラーをつくる。
- モデルは作る必要がない。当たり前、すでにあるモデルから検索するので
- モデルに検索用メソッドを作成する。
- ビューは必要。=>遷移先のビューのこと
各ページに検索する場合は、contrllerにseachメソッドを作ればいい。
urlに検索をパラメータで渡す。
そのためにgetでする。
View
ここでsearchは各コントローラーへparamsで渡る
clients_seach_pathでclient controller のsearch メソッドへ渡してくれる,
//formタグにわたす第一引数、オブジェクトがパスを決定、つまりコントローラーとアクション、viewの遷移先を決定する <%= form_tag(clients_seach_path, method: :get, class: "form-inline") do %> //text_field_tag の第一引数はname属性になる。 <%= text_field_tag :search, "", {class: "form-control m-1", placeholder:"検索"} %> <%= submit_tag "検索" , class: "btn btn-primary" %> <% end %>
上記のように記載すると、HTMLにはname属性がつく
これで持ってparamsに詰め込まれる
コントローラーに
def serachを宣言する
def search @clients = Client.get_client_search(params[:search]) end
ルーティングも忘れないように
これがないとそもそも遷移しない。
get '/clients/seach', to: 'clients#search'
モデル
scope :get_client_search, ->(search_word){ Client.where(['name LIKE ? OR client_company LIKE ? OR address LIKE ?', "%#{search_word}%","%#{search_word}%","%#{search_word}%"]) }
Railsの検索
スコープの書き方を覚えておくと便利
検索用のgem がある。 検索用の入力が4.5個ある場合ならgemを使ったほうがいい。
formはgetにする。
urlパラメータで取得できる。 つまりurlにキーワードが出る。ブックマークしてアクセスできるので良い。
View
ビューはsearchはindexと兼用するので、パーシャルにしておく。 ソースがきれいになる。