Rails 一日一つメソッド (Day12) orderメソッド
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