LoginSignup
3
1

More than 3 years have passed since last update.

ダミーデータを条件付きで表示/非表示にする方法

Posted at

はじめに

本記事は製品情報などのダミーデータを、DBにデータが保存されているかいないかで表示/非表示にする方法を解説するものです。
考えてみれば難しいことではないのですが、とても悩んで時間を使ってしまったので、今後のために残しておくことと、同じようなエラーに遭遇した方の助けになれば良いと思い、記事にしました。

環境

  • 言語:Ruby
  • フレームワーク:Rails
  • DB:MySQL

やりたかったこと

DBに保存済みのレコードをトップページに表示し、DBに何も保存されていなければダミーデータの製品を表示させる。

該当箇所のコード(コントローラー)

class ItemsController < ApplicationController
  before_action :authenticate_user!, only: [:new, :create]

  def index
    @items = Item.all.order('created_at DESC')
  end

該当箇所のコード(ビューファイル)


  <% if @items == nil %>
    #製品を表示させるための処理(今回は割愛)
  <% end %>

結果・・・・・
エラーは発生しないものの、ダミーデータが表示されない。。。
製品情報をDBに保存してみたところ、保存した製品自体は表示されるので、DBのデータを取得してトップページに反映させる処理自体は問題ない様子。

原因

if文の条件式にnilを指定しましたが、if文がDB内を「空」と判断してくれなかった様子

解決策①

if文の条件式部分を下記のコードに変更 (配列の要素を指定する)

<% if @items[0] == nil %>

nilに対し配列の1つ目、すなわち[0]を指定することにより、if文が「配列の1つ目が空」=「DBにデータは保存されていない」という判断をしてくれます。
これでDBにデータが保存されている時は保存されたデータを表示し、DBにデータが保存されていなければダミーデータを表示することができました。

解決策②

if文の条件式部分を下記のコードに変更 (empty?メソッドを用いる)

<% if @items.empty %>

emptyメソッドは要素が0の時にtrueを返すメソッドです。
これを条件式に指定することにより、DBに解決策①と同様の挙動をしてくれました。

さいごに

nilは条件指定で頻繁に使いますが、今回はそこに頭が集中するあまり他の方法論を検討していなかったのが時間を使い過ぎた原因と思っています。
一つの書き方が完答、というわけではありませんし、柔軟に考えるためにも様々な書き方を試してみるのも大事だなと感じました。

3
1
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
3
1