@Taka4xv

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Rails TrueFalseの表示の変え方について

解決したいこと

Railsの練習でスケジュール管理アプリを作成しています。
チェックボックスでTrueとFalseを判別して、表示しています。
表示は●と×にしたいです
例)
Ruby on Railsでスケジュール管理アプリを作成しています。
新規作成画面でチェックボックスでチェックを入れるとTrueをDBに送ります。
一覧画面ではTrueとFalseを文字で表示するのではなく、〇と×で表示しようと考えていますが、
なかなかうまくいかなかったので投稿させていただきました。

発生している問題・エラー

一覧画面で表示される●×がチェックボックスのチェック関係なくすべてのスケジュールで〇が表示されてしまう。

該当するソースコード

Controller

  def index
    @schedules = Schedule.all
    if @allday = true
      $a = "〇"
    else
      $a = "×"
    end

index.html.erb

<h2>スケジュール一覧</h>
    <table>
        <thred>
            <tr>
                <th>ID</th>
                <th>タイトル</th>
                <th>終日</th>
                <th>スケジュール更新日時</th>
            </tr>
        </thred>
        
        <tbody>
            <% @schedules.each do |schedule|%>
                <tr>
                    <th><%= schedule.id %></th>
                    <th><%= schedule.title %></th>
                    <th><%= $a %></th>
                    <th><%= schedule.updated_at.to_s(:datetime_jp1) %></th>
                </tr>
            <% end %>
        </tbody>
    </table>

DB

class CreateSchedules < ActiveRecord::Migration[5.0]
  def change
    create_table :schedules do |t|
      t.string :title
      t.boolean :allday
      t.string :memo

      t.timestamps
    end
  end
end

自分で試したこと

グローバル変数をインスタンス変数にへんこうしたり、
変数名を変更したり、
@schedule = Schedule.find(params[:id])
をいれたり(エラー出ました)
を行いました。
正直、的外れなことをしていると思っていますが、いくら調べても欲しい情報が見つからず、相談させていただきました。

初めての質問なので、至らぬ点数多くあるとは思いますが、よろしくお願いします。
足らない情報があればそのあたりも教えてください
よろしくお願いします。

0 likes

1Answer

@dikeda さんの回答が全てだと思いますが、捕捉で回答いたします。
(前に、似たような質問に回答したので、その流用になります)

例えば、今回の「論理型を文字に変換したい」のような、
「他のViewでも同じ処理をする可能性がある」時に便利な
「ヘルパー」というものを使った方法を紹介します。
( 共通の処理は1箇所に定義しておくと便利ですよ 、というものです)

やり方は簡単で、
app/helpers/application_helper.rb内にメソッドを定義し、
view側で呼び出すだけです。

以下、例です。

ヘルパー側での定義

app/helpers/application_helper.rb
module ApplicationHelper
  # true・falseを文字に変換する
  def convert_boolean_to_character(converting_target)
    converting_target ? '○' : '×'
  end
end

View側での呼び出し(@dikeda さんの記述を流用させてもらいます)

index.html.erb
#each文で1レコード毎の処理を書く
<% @schedules.each do |schedule|%>
  <tr>
      <th><%= schedule.id %></th>
      <th><%= schedule.title %></th>
      #レコード毎に:alldayカラムが保存されているのでその値をレコード毎で分岐
      #ここでヘルパーに定義したメソッドを呼び出しています
      <%= convert_boolean_to_character(schedule.allday) %>
      <th><%= schedule.updated_at.to_s(:datetime_jp1) %></th>
  </tr>
<% end %>

なお、converting_target ? '○' : '×'の部分は可読性を考慮して
「三項演算子」というものを用いています。

コードを後で読み返した時に分からなくなりそうな場合は、
「if・else」に書き換えることもできますので、チャレンジしてみてください。

無理にこのようにする必要はなく、
あくまで「こんな方法もありますよ」くらいのアドバイスだと思ってください。

0Like

Comments

  1. @Taka4xv

    Questioner

    ありがとうございます。
    どちらの方法でも表示されました。
    ヘルパーは聞いた事はあったのですが、学習を後回しにしていました。
    今は言われたとおりにしか変更していないので、この際にしっかり勉強していろんな方法探していきます。
    少ない情報の中でくみ取っていただきありがとうございました。

Your answer might help someone💌