AR삽질러

Rails 一日一つメソッド (Day11) whereメソッド 본문

Ruby/RubyOnRails-日本語

Rails 一日一つメソッド (Day11) whereメソッド

아랑팡팡 2023. 12. 31. 17:05
728x90

 

Rails 一日一つメソッド (Day11) whereメソッド

 

whereメソッド

 - RailsのActiveRecordでデータベースクエリを作成する。(Query Method) 

 - テーブル内の条件にコードを配列の形で取得することができるメソッド。

 

whereメソッド使い方

User.where("name = ?", "Arang")

 - usersテーブルでnameが"Arang"のユーザを探す。

 

whereメソッドで条件を使う

User.where("age >= ? AND membership = ?", 18, "premium")

 - ageが18以上で、membershipがpremiumのすべてのユーザを探す。

 

whereメソッドでHashを使う

User.where(email: "arang@example.com", active: true)

 - emailが"arang@example.com"でありながら、活性化されているなユーザーを探す。

 

whereメソッドチェーンを使う

User.where(active: true).order(created_at: :desc)

 - 活性化されているなユーザーを探し、ユーザーを生成時間の降順に並べる。

 


whereメソッド例題

 - 管理者がユーザを検索して探す機能

 

userController.rb

class UsersController < ApplicationController

    def index
        if params[:search].present?
          @users = User.where("email LIKE ?", "%#{params[:search]}%")
          @search_performed = true
        else
          @users = User.all
          @search_performed = false
        end
    end
end

params[:search].present?

 - ユーザが検索Formを入力し、フォームを提出したことを確認

 - present?メソッドは、params[:search]が空でなく、値があるかどうかを検査。

@users = User.where("email LIKE ?", "%#(params[:search]}%")

 - ユーザーが入力した検索語(params[:search])を含むすべてのメールアドレスを持つユーザーを見つけるためにwhereクエリを使用

 - LIKE演算子は部分一致を検査

 - %ワイルドカードは文字列のどの部分にも検索語が含まれることを意味する

@search_performed = true

 - 検索が出来た時Flagをtrueに設定する。

@users = User.all

 - 検索ワードが提供されていない場合は、すべてのユーザーをインポートするためにUser.allを使用

@search_performed = false

 - 検索が出来なかった場合Flagをfalseに設定する。

 

 

index.html.erb

<!-- app/views/users/index.html.erb -->
<h1>登録されている Users</h1>
<% if @users.any? %>
  <table>
    <thead>
      <tr>
        <th>ID</th>
        <th>Name</th>
        <th>Email</th>
        <th>Actions</th>
      </tr>
    </thead>
    <tbody>
      <% @users.each do |user| %>
        <tr>
          <td><%= user.id %></td>
          <td><%= user.name %></td>
          <td><%= user.email %></td>
          <td>
            <%= link_to '修正', edit_user_path(user), class: 'action-button' %><br>
            <%= button_to '削除', user_path(user), method: :delete, class: 'action-button' %>
          </td>
        </tr>
      <% end %>
    </tbody>
  </table>
<% elsif @search_performed %>
  <p>検索結果がありません。。</p>
<% end %>

  <%= form_with(url: users_path, method: :get, local: true) do |form| %>
    <div class="search-field">
      <%= form.label :search, "ユーザー検索(email):" %>
      <%= form.text_field :search, value: params[:search] %>
      <%= form.submit "検索", class: 'action-button' %>
    </div>
  <% end %>

if @users.any?

 - @usersが空いていない場合ユーザーlistを返す。

users.each do |user| 

 - @usersがユーザーを反復して情報を表紙する。

elsif @search_performed

 - 検索機能が実行されているが、@usersが空いている場合"検索結果がありません。。"を返す。

form_with

 - ヘルパーは検索フォームを作成し、GETメソッドを使用してusers_pathにリクエストを送信する。
 - ユーザーはフォームにメールを入力し、検索ボタンをクリックして検索を実行できる。

 

 

 

 


https://github.com/designAR/rails_method_study/tree/day11_where

 

GitHub - designAR/rails_method_study

Contribute to designAR/rails_method_study development by creating an account on GitHub.

github.com

 

728x90
반응형
LIST