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

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

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

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

Ruby on Rails 6

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

Q&A

解決済

1回答

2248閲覧

enumのArgumentErrorを解消したい

katahik

総合スコア79

Ruby

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

Ruby on Rails 6

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

0グッド

0クリップ

投稿2021/07/11 07:39

編集2021/07/11 11:49

概要

enumを使って、フォーム(checkbox)を作成した際に

ArgumentError ('1' is not a valid brake):

のエラーが発生してしまいました。
このカラムでは整数しか入らないようにしているので、'1'(文字列)が入ってくることをinvalidしているだと思いますが、
どのようにしたら数値の1を渡せるようになるのか、ご教授いただけると幸いです。

rails '6.0.3'

デバッグ

フォームを飛ばしたときのparamの中身(やはり文字列の"1"が入っている、、、)

(byebug) params <ActionController::Parameters {"authenticity_token"=>"...", "brake"=>"1", "controller"=>"download", "action"=>"confirm"} permitted: false>

コード

download.rb

class Download < ApplicationRecord enum brake: {on: 1, off: 0}, _prefix: true end

new.html.erb

<%= form_with url: create_download_path(@download), local: true do |f| %> <fieldset class="form_check-block"> <label> <%= f.check_box :brake, checked: @download&.brake_on? %> <%= f.label " ", class: "top_left" %> </label> </fieldset> <span>ブレーキ</span> <button>登録する</button> <% end %>

download_controller.rb

class download_controller < ApplicationController def new @download = ::Download.new end def create @download = ::Download.new(download_params) @download.save end def download_params params.permit(:brake ) end end

shema.rb

create_table "download", force: :cascade do |t| t.integer "brake", limit: 1, default: 1, null: false t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false end

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

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

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

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

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

guest

回答1

0

ベストアンサー

paramsで渡ってくるのはすべて文字列です。数値が必要な場合は数値変換を行う必要があります。
ただ、この場合は数値の1を渡しても駄目かも。enumしていますから :on, :off を渡す必要があるのかも。
"on","off"でもいけるかな。その場合はここを参考にcheck、uncheck valueを設定。

投稿2021/07/11 11:52

winterboum

総合スコア23549

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

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

katahik

2021/07/11 12:35

<%= f.check_box :brake, checked: @download&.brake_on? %> ↓ <%= f.check_box :brake, { checked: @download&.brake_on? }, :on, :off %> このようにしたら、無事DBに保存することができました。 本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問