質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • Ruby

    9446questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • Ruby on Rails 5

    3194questions

Rails:数値に対応した文字列を表示したい

解決済

回答 1

投稿

  • 評価
  • クリップ 2
  • VIEW 53

kento735

score 2

お世話になります。
力及ばず質問させていただきます。

今回、練習として「顧客データの登録と編集」ができるアプリを作っております。
顧客には「一般」「上級」「ゴールド」の三種類のランクを設定できるようになっています。
それぞれ1,2,3の数値を割り振ってテーブルに保存するようにしました。

前提・実現したいこと

顧客情報のリスト表を作成した際にrankカラムが1の顧客には「一般」、2の顧客には「上級」、3の顧客には「ゴールド」と表示するにはどのようにすればいいでしょうか。
力を貸していただければ幸いです。

該当のソースコード

list.html.erb 

<h2>顧客一覧</h2>
<p>情報を編集したい顧客の名前を押して下さい</p>


<table class="seito_list">
  <tr>
    <th>名前</th>
    <th>電話番号</th>
    <th>ランク</th>
  </tr>
<% @list.each do |li| %>
  <tr>
    <td><%= link_to(li.name,"/#{li.id}") %></td>
    <td><%= li.phone %></td>
    <td><%= li.rank %></td>
  </tr>
<% end %>
</table>

<%= link_to('トップへ戻る','/') %>

当たり前なのですが、このままではli.rankは数値で表示されますので、どうにかして数値に対応したランクの文字列を表示したいのです。

register.html.erb(ここで顧客情報を登録します)

<h2>顧客情報登録</h2>
<%= form_for @clients,:url => {:action => :create} do |f| %>
<%= f.label :"名前" %><%= f.text_field :name %><br>
<%= f.label :"電話番号" %><%= f.text_field :phone %><br>
<%= f.label :"ランク" %><%= f.select :rank,[["一般",1], ["上級",2], ["ゴールド",3]],  :prompt => "選択してください"  %><br>

<br>

<%= f.submit "決定", data: { confirm: "登録しますか?"} %>

<% end %>


routes.rb

Rails.application.routes.draw do
  get '/'  => 'home#index'
  get 'home/register' => 'home#register'
  get 'home/list' => 'home#list'
  get '/:id' => 'home#edit'

  patch '/home/update' => 'home#update'

  post 'home/create' => 'home#create'
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end

home_controller.rb

class HomeController < ApplicationController
  def index
    @datas = Client.all
  end

  def register
    @clients = Client.new
  end

  def list
    @list = Client.all
  end

  def edit
    @clients = Client.find_by(id: params[:id])
  end

  def create
    @clients = Client.create(name: params[:client][:name], phone: params[:client][:phone], rank: params[:client][:rank])
    redirect_to("/")
  end

  def update
    @clients = Client.find_by(id: params[:client][:id])
    @clients.update(name: params[:client][:name], phone: params[:client][:phone], rank: params[:client][:rank])
    redirect_to("/home/list")
  end
end

稚拙な質問とは思いますが、ご教示いただければ幸いです。
よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

一案です。動作は確認していませんし、これがベストだとも思いませんが、値と文字列のハッシュをどこかに定義して表示時に参照する方針でひとまずよいのではないかと考えます。

home_controller.rb

  def list
    @list = Client.all
    @rank_labels = {1: '一般', 2: '上級', 3: 'ゴールド'}
  end

list.html.erb

    <td><%= @rank_labels[li.rank] %></td>

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/15 13:27

    ご回答ありがとうございます。
    無事表示することができました。
    基礎中の基礎知識が抜け落ちていたみたいなので復習するきっかけにもなりました。

    キャンセル

同じタグがついた質問を見る

  • Ruby

    9446questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • Ruby on Rails 5

    3194questions