0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

クエリパラメータについて

Posted at

はじめに

railsで実装しているときに、検索機能を作成していたのですが、そこで躓いたので備忘録として記録しておきます。
そもそも、paramsについての理解が浅いのでこちらも同時に理解していきたいと思います。

手順

1 現状把握

スクリーンショット 2025-01-18 9.32.08.png
このようにURLに?category=腹筋などが追記されている状態。

  • なぜこれができるのか
  • これで何ができるのか etc...

上記のことを記録していきます。

2 クエリパラメータとは

?category=腹筋の部分をクエリパラメータと呼びます。そして、これらはURLの最後に追記されるキーの組み合わせのことです。上記の例ではcategoryがキー腹筋が値です。

3 クエリパラメータの作成方法

今回私はlink_toで作成したので、こちらを確認してください。

index.html.erb
<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=腹筋)を保持してくれる役割でした。

それらをうまく活用することで、検索機能なども作成することができます。
以下に検索機能の参考例を記載しておきます。

index.html.erb
<%= form_with url: videos_path, method: :get, local: true do |f| %>
  <%= f.text_field :query, placeholder: '検索キーワードを入力' %>
  <%= f.submit '検索' %>
<% end %>
controller.rb
if params[:query].present?

上記のように検索フォームに入力した内容がqueryというキーに値として保持され、それを活用してコントローラーで、もしparamsにデータがあればという形にしています。if文以降はそれぞれが必要な記述を記載してください。

おわりに

少しずつ理解できてきていますが、まだまだわからないことだらけです。こつこつと諦めずに勉強していき、将来の自分に自己投資をしていきたいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?