グロースエンジニアのブログ

Ruby on Rails エンジニアです!開発に当たって勉強したことをまとめていこうと思います!

ヘッダーに検索(ransack)を入れた時のまとめ 〜Ruby on Rails4〜

検索として、gem ransackを使った。

ページのヘッダー(メニュー)のところにransackを入れる時に躓いたのでそのまとめをしておく。

ransackの導入

Gemfileに以下を記述して、【bundle install】した。

gem 'ransack'

現状、lessonsコントローラーがあり、サイトTOPは【lessons#home】に指定している。そのため、検索結果は【lessons#index】に飛ばしたい。
※この辺りで躓いた。。。

コントローラ、ビューへの記載

検索結果はgem kaminariを使ってページングで表示する。

lessonsコントローラのindexアクションに以下を記述。

      @search = Lesson.search(params[:q])
      @search_lessons = @search.result.page(params[:page]).per(3)
      #per内の数字は1ページに表示したい検索結果の数を記載

また、ページ内のヘッダーに以下を記述した。
※bootstrap3を使っているため以下のような記述になりました。

          <div class="form-group navbar-form navbar-left">
            <%= search_form_for @search do |f| %>
              <%= f.text_field :summary_cont, :placeholder => "レッスン検索", :size => "13px", :class => "form-control" %>
              <%= f.submit '検索', :class => "btn btn-default" %>
            <% end %>
          </div>

【:summary_cont】はlessonテーブル内の【summary】カラムを検索してって意味らしい。
※間違ってたら指摘とかもらえると嬉しいです。。。

あと、【:size】がうまく機能せず、ちょっと戸惑う。13pxとかしたけど、それなりの大きさで表示されました。単位は無視されるんでしょうか?

 この状態で「検索」ボタンを押すと、【lessons#index】では検索結果が表示されるが、それ以外のページでボタンを押すと上記ページにリダイレクトが出来なかった。

検索結果を【lessons#index】にリダイレクト

結果は簡単で、【search_form_for】に【url:】を入れれば良かった。

          <div class="form-group navbar-form navbar-left">
            <%= search_form_for @search, url: lessons_path do |f| %>
              <%= f.text_field :summary_cont, :placeholder => "レッスン検索", :size => "13px", :class => "form-control" %>
              <%= f.submit '検索', :class => "btn btn-default" %>
            <% end %>
          </div>

 でも、これにずいぶん時間を取られたな。。。

今後の検索機能として

今の検索はlessonテーブルのsummary部分のみを検索しているが、titleも検索したい。

そのため、titleなど他のカラムを検索できるようにカスタマイズする予定です。