AR삽질러

Rails 一日一つメソッド (Day12) orderメソッド 본문

Ruby/RubyOnRails-日本語

Rails 一日一つメソッド (Day12) orderメソッド

아랑팡팡 2024. 1. 1. 23:05
728x90

 

Rails 一日一つメソッド (Day12) orderメソッド

 

orderメソッドとは

 - orderメソッドは、データベースから取得してきた値を並び変えることができるメソッド。

 

orderメソッド使用方法

1) 基本方法

 - orderメソッドはActiveRecordクエリで結果の順番を指定する時に使う。

例)User.order(:create_at) : 作られた順番通り並べる。

Model名.order("並び替えたいカラム")
Model名.order(:並び替えたいカラム)

 

2) 複数のカラムに整列
 - 複数のカラムを使用して並べ替えることができる。
例)User.order(:last_name,:first_name) - 姓(last_name)で先に並び、名前(first_name)で並べ替える。

 

3) 上り順及び下り順
 - 基本的にオーダーは昇順(ASC)で並べ替える。
 - 降順(DESC)で整列するには、カラム名の後にdescを追加する。
例:User.order(created_at::desc) - これはユーザーを最新の順に並べ替える。

モデル名.order("カラム名 DESC")
モデル名.order(カラム名: "DESC")
モデル名.order(カラム名: :DESC)

 

4) チェーンメソッド
 - orderは、他のクエリメソッドと一緒にチェンニングできる。
例 ) User.where(active: true)。order(created_at:desc) - アクティブなユーザーを最新の順に並べ替える。

 


users_controller.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

        case params[:sort_by]
        when 'created_at'
            @users = @users.order(created_at: :desc)
        when 'name'
            @users = @users.order(:name)
        end
    
        @search_performed = params[:search].present?
    end
end

params[:sort_by].present?

 - パラメータは存在する場合、メール アドレスの部分一致検索を実行する。
 - 検索が実行されたかどうかは@search_performed変数に保存される。

@search_performed

 - ユーザーが選んだ結果が :sort_by に保存されListを並べる。

create_at

 - created_atを選択すると、ユーザー生成時間に応じて降順に並べ替える。

name

 - nameを選択すると、ユーザーを名前に従って昇順に並べ替える。

 

index.html.erb

<!-- app/views/users/index.html.erb -->
<h1>登録されている Users</h1>

<%= form_with(url: users_path, method: :get, local: true) do |form| %>
  <%= form.label :sort_by, "整列 基準:" %>
  <%= form.select :sort_by, options_for_select([['生まれ順', 'created_at'], ['名前順', 'name']]), include_blank: true %>
  <%= form.submit "整列" %>
<% end %>

<% 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 %>

<br>
<%= link_to 'main', root_path %>


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

 

GitHub - designAR/rails_method_study

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

github.com

 

 

728x90
반응형
LIST