はじめに
学習の備忘録です。
Ruby on Rails 6.0、MySQLでアプリケーションを開発しています。
やりたいこと
あるモデルに登録されている情報を、トップページに表示する実装を学習。
モデルに情報が登録されている場合はモデル内の情報を一覧で表示できるようにし、
モデルに情報がない場合はダミーのデータ(後述の配置例では文字列)を表示するように実装します。
上記の通り、条件分岐の記述が必要になるのでif文
を使います。
まずトップページにモデルの情報を取得できるようにルーティングとアクションを設定します。
Rails.application.routes.draw do
resources :items, only: [:index, :new, :create]
end
class ItemsController < ApplicationController
def index
@items = Item.all
end
end
ここからif文
を作成していきます。
上記でコントローラーに、モデルの情報を全て取得できるように
設定したインスタンス変数を使い、情報を呼びだしつつ、
今回の条件であるモデルに情報がある場合どうするのかを設定するためのメソッドを使います。
それがpresent
メソッドです。
presentメソッドとは
Railsにおいて、presentメソッドはオブジェクトであるレシーバーの値が存在すればtrue、存在しなければfalseを返すメソッドです。
下記のように?
をつけて使用します。
<% if インスタンス変数.present? %>
こう記述することにより、インスタンス変数に値が入っていればtrueを返し、
これに続く値が入っていた場合の処理を実行します。
値が入っていない、もしくはインスタンス変数そのものが存在しない場合はfalseを返し、
処理をしない、もしくは値が入っていない場合の処理を行います。
以上を踏まえて、ビューファイルに記述すると下記のようになります。
配置例
<% if @items.present? %>
# ↓下記は取得した情報を並べて表示するための記述です↓
<% @items.each do |item| %>
中略
# ↑上記は取得した情報を並べて表示するための記述です↑
<% else %>
アイテムはありません
<% end %>
<% end %>
おまけ
presentメソッドと似たような機能を持つメソッドがありますので紹介します。
(Railsのpresentの使い方を現役エンジニアが解説【初心者向け】より抜粋)
nil?メソッド
変数.nul?
このメソッドでtrueが返ってくる時は、レシーバーである変数そのものが存在しない時ということになります。
empty?メソッド
変数.empty?
このメソッドでtrueが返ってくる時は、レシーバーである変数に値が何も入っていない時ということになります。
blank?メソッド
変数.blank?
このメソッドでtrueが返ってくる時は、レシーバーである変数そのものが存在しないか、変数に値が何も入っていない時ということになります。
nul?メソッドとempty?メソッド両方の機能を併せ持つメソッドです。
また、present?メソッドと逆の機能を持っているとも言えます。
終わり