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属性がつく

f:id:happy_teeth_ago:20190126221905p:plain

これで持って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と兼用するので、パーシャルにしておく。 ソースがきれいになる。