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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1303閲覧

【rails boolean】boolean型でfalseが取得できていない

sato_sato

総合スコア8

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2023/04/04 17:07

実現したいこと

  • boolean型でfalseデータを取得する
  • 商品追加時(createメソッド)にboolean型でtrue(販売中), false(販売停止中)を商品一覧ページでは、true,falseではなく販売中、販売停止中と、ステータス状態の名前として表示させたい。

前提

サンプルサイトとして、お菓子のオンライン販売ページを作成しております。
管理者側で商品の追加(createメソッド)したものを一覧表示させるページを作成しております。

投稿時に下記画像の下部にあるようなラジオボタンにて、boolean型で販売ステータス状態も実装中です。

イメージ説明

新規登録ボタンでcreateメソッド実行後、商品一覧ページに遷移すると下記画像のような状態になります。
イメージ説明

発生している問題

・ラジオボタンでfalse(販売停止中)を選んでも一覧ページを見るとtrueになっている。
・商品一覧ページではステータス状態を名前(販売中・販売停止中)で表示させたい。

該当のソースコード

views/admin/items/new.html.erb

1 <tr> 2 <th>販売ステータス</th> 3 <td> 4 <!-- Q.form_withのmodel: ? 販売できるか→item? --> 5 <%= form_with model: @item do |f| %> 6 <%= f.radio_button :is_active, value: true %> 7 <%= f.label :is_active, "販売中", {value: :true, style: "display: inline-block;"} %> 8 <%= f.radio_button :is_active, value: false %> 9 <%= f.label :is_active, "販売停止中", {value: :false, style: "display: inline-block;"} %> 10 <% end %> 11 </td> 12 </tr>

views/admin/items/index.html.erb

1 <% @items.each do |item| %> 2 <tr> 3 <td><%= item.id %></td> 4 <td><%= link_to @items.name, admin_item_path(item.id) %></td> 5 <td><%= item.price %></td> 6 <td><%= item.genre.name %></td> 7 <td><%= item.is_active %></td> 8 </tr> 9 <% end %>

shema.rb

1 create_table "items", force: :cascade do |t| 2 3 t.boolean "is_active", default: true, null: false 4 5 end

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2023/04/05 00:38

コントローラーのコードはどのようになっていますか?
guest

回答1

0

ベストアンサー

false を保存できるようにする

radio_button の第二引数の指定方法が誤っています。
この書き方では "valuefalse" という文字列が送信されますので、rails が false であると認識できません。
以下のように修正してください。

diff

1 <%= form_with model: @item do |f| %> 2- <%= f.radio_button :is_active, value: true %> 3+ <%= f.radio_button :is_active, true %> 4 <%= f.label :is_active, "販売中", {value: :true, style: "display: inline-block;"} %> 5- <%= f.radio_button :is_active, value: false %> 6+ <%= f.radio_button :is_active, false %> 7 <%= f.label :is_active, "販売停止中", {value: :false, style: "display: inline-block;"} %> 8 <% end %>

ステータス状態を名前(販売中・販売停止中)で表示する

helper に翻訳用のメソッドを書くのが、割とシンプルでベーシックな手法かと思います。

rb

1# app/helpers/items_helper.rb 2 3module ItemsHelper 4 def item_status_name(item) 5 if item.is_active 6 '販売中' 7 else 8 '販売停止中' 9 end 10 end 11end

diff

1# app/views/admin/items/index.html.erb 2 3- <td><%= item.is_active %></td> 4+ <td><%= item_status_name(item) %></td>

投稿2023/04/05 01:58

編集2023/04/05 02:00
shinoharat

総合スコア1676

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sato_sato

2023/04/06 11:42

ご回答いただき大変ありがとうございました。 記述を追加・修正することで無事解決しました! 「item_status_name(item)」の記述の内容について理解が不足しておりませんでしたが、showページ(items/show)では(@item)とすることで引数で取っているという理解も深められました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問