Railsでransackを使って検索機能を作成する。
目標:友人と作成しているWebサービスで検索機能をつけたい。
- Rails:5.0.2
- ruby:2.4.0
- Bash on Ubuntu on windows Version 10.0.15063
- ransack(今回はこちらで実装してみるという記事)
ダミーのプロジェクトでransackを実装してみる。
こちらの記事を参考にさせていただき、ダミーのプロジェクトでransackを実装してみる。
http://ruby-rails.hatenadiary.com/entry/20141008/1412774436
既存PJにransackを導入し検索画面を作成する。
この節での目標は友人と作成しているWebサービスに対してransackを導入し、商品に当たるテーブルを検索する画面、検索結果を表示する機能を実装するところである。
(この記事の最終的な目標は上記の通りなので、それまでの1つ目のステップ)
- ransackをinstallする。
gem 'ransack'
bundle install
Using ransack 1.8.4 インストール時点(2017/12/17)で左記のバージョンがインストールされました。
- 検索を行いたいテーブルのコントローラーにindexアクションを追加する。
def index
@q = Hobby.search(params[:q])
@hobbies = @q.result(distinct: true)
end
- ルーティングを追加する。
- resources :hobbies, only: %w(create)
+ resources :hobbies, only: %w(index create)
- 検索機能を実装したいテーブル(hobby)のViewファイルを作成する。
h1 趣味検索
= search_form_for @q do |f|
= f.label :name_cont, "キーワード"
= f.search_field :name_cont
br/
= f.submit '検索', class: 'record-form__submit-button'
table
thead
tr
th 趣味名
tbody
- @hobbies.each do |hobby|
tr
td = hobby.name
br/
今検索機能をつけたいテーブルの構造はこんな感じでnameの検索ができれば十分。
create_table "hobbies", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
結果、趣味の検索ができた。
検索結果にリンクを付け検索結果より別画面に遷移する。
先ほどまでで商品に当たるテーブルを検索する画面、検索結果を表示する機能ができた。ここでは、検索結果の商品(趣味)にリンクをつけて、検索結果のレコ―ドをクリックすると別画面に遷移させる機能を実装する。
- 検索結果の商品(趣味)にリンクを付ける。
実装としては、商品(趣味)のshowアクションで商品(趣味)個別のページを作成する。
def show
@hobby = Hobby.find(params[:id])
end
routes.rbにshowアクションを追加。
- resources :hobbies, only: %w(index create)
+ resources :hobbies, only: %w(index show create)
showアクションのviewファイルを作成。
h1 一覧
table
thead
tr
th 趣味名
td = @hobby.name
indexのviewファイルを変更。
tbody
- @hobbies.each do |hobby|
tr
- td = hobby.name
+ td = link_to hobby.name, hobby
以上で、一旦完了。
参考文献
下記参照させていただいた文献一覧です。
http://ruby-rails.hatenadiary.com/entry/20141008/1412774436
https://qiita.com/nysalor/items/9a95d91f2b97a08b96b0
https://qiita.com/nishina555/items/2c1f8bae980e426519bc