はじめに
railsで実装しているときに、検索機能を作成していたのですが、そこで躓いたので備忘録として記録しておきます。
そもそも、params
についての理解が浅いのでこちらも同時に理解していきたいと思います。
手順
1 現状把握
このようにURLに?category=腹筋
などが追記されている状態。
- なぜこれができるのか
- これで何ができるのか etc...
上記のことを記録していきます。
2 クエリパラメータとは
?category=腹筋
の部分をクエリパラメータと呼びます。そして、これらはURLの最後に追記されるキー
と値
の組み合わせのことです。上記の例ではcategoryがキー
で腹筋が値
です。
3 クエリパラメータの作成方法
今回私はlink_to
で作成したので、こちらを確認してください。
<div class="categories">
<% @categories.each do |category| %>
<%= link_to videos_path(category: category.name) do %>
<div><%= image_tag category.image_path %></div>
<% end %>
<% end %>
</div>
@categories
には腹筋や背筋などの筋トレ部位のデータを初期データとして入れております。それをeachで要素を1つずつ以下の処理に入れています。今回はクエリパラメータの備忘録なので、以下のコードの部分が大切になります。
<%= link_to videos_path(category: category.name) do %>
link_toでパスを指定した後にカッコ内にキーと値を入れます。ここでのキーは何でも良いのですが、誰が見ても分かるようにする方が良いです。これにより、クエリパラメータが作成されます。
3 何ができるのか
まずは先ほどのビューで作成したデータをコントローラーで受け取る方法です。params[:category]
このように記述することで、category
というキーの値を取得してくれます。ここで理解できたのですが、クエリパラメータにおけるparams
はユーザーがリクエストした内容(今回ではcategory=腹筋
)を保持してくれる役割でした。
それらをうまく活用することで、検索機能なども作成することができます。
以下に検索機能の参考例を記載しておきます。
<%= form_with url: videos_path, method: :get, local: true do |f| %>
<%= f.text_field :query, placeholder: '検索キーワードを入力' %>
<%= f.submit '検索' %>
<% end %>
if params[:query].present?
上記のように検索フォームに入力した内容がquery
というキーに値として保持され、それを活用してコントローラーで、もしparamsにデータがあればという形にしています。if文
以降はそれぞれが必要な記述を記載してください。
おわりに
少しずつ理解できてきていますが、まだまだわからないことだらけです。こつこつと諦めずに勉強していき、将来の自分に自己投資をしていきたいと思います。