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

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

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

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

Ruby on Rails 6

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

Q&A

解決済

1回答

655閲覧

「enum」、form_withの「f.radio_button」を使ってDBに保存する機能をつけたい。しかし、ページに遷移するたびに「ArgumentError」が出てしまう

bon96

総合スコア21

Ruby

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

Ruby on Rails 6

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

0グッド

0クリップ

投稿2022/01/25 04:28

編集2022/01/25 07:18

enumによるエラーを解決したいです

解決したいエラー

イメージ説明

飲食店のwebサイトを作りたく、予約システムを実装中

イメージ説明

・「席指定」の項目をenumを用いてDBに保存しようとしています

現在のVsコードの記述↓

<マイグレーション>

ruby

1class CreateForms < ActiveRecord::Migration[6.0] 2 def change 3 create_table :forms do |t| 4 t.string :last_name_kana, null: false 5 t.string :first_name_kana, null: false 6 t.string :phone_number, null: false 7 t.string :number_of_people, null: false 8 t.integer :seat, null: false, default: 0 9 t.datetime :datetime, null: false 10 11 t.timestamps 12 end 13 end 14end 15

<コントローラー>

ruby

1class FormsController < ApplicationController 2 3 def index 4 @form = Form.new 5 end 6 7 def create 8 @form = Form.new(form_params) 9 10 end 11 12 private 13 14 def form_params 15 params.require(:form).permit(:last_name_kana, :first_name_kana, :phone_number, :number_of_people, :seat, :datetime) 16 end 17end

<モデル>

ruby

1class Form < ApplicationRecord 2 enum seat: { table: 0, counter: 1} 3 4 with_options presence: true do 5 validates :last_name_kana, format: { with: /\A[ァ-ヶー-]+\z/, message: 'is invalid. Input full-width characters.'} 6 validates :first_name_kana, format: { with: /\A[ァ-ヶー-]+\z/, message: 'is invalid. Input full-width characters.'} 7 validates :number_of_people, numericality: { only_integer: true, message: 'is invalid. Input only number'} 8 validates :datetime 9 end 10 11 VALID_PHONE_REGEX = /\A\d{10}$|^\d{11}\z/ 12validates :phone_number, presence: true, format: { with: VALID_PHONE_REGEX } 13validates :phone_number, numericality: { only_integer: true, message: 'is invalid. Input only number' } 14 15end

enumを用いるために行った記述

1つめ

ruby:form.rb

1class Form < ApplicationRecord 2 enum seat: { table: 0, counter: 1}

2つめ

ruby:Gemfile

1gem "enum_help"

bund installしました

3つめ

ruby:config>locales>ja.yml

1ja: 2 enums: 3 form: 4 seat: 5 table: テーブル席 6 counter: カウンター席

今回の問題点

・予約フォームへ遷移するとき、保存するときにエラーが出る
・リロードすると、エラーが出なくなり、DBに保存もできる

予約システム自体の問題点(今回は質問に含みません)

・値が空でも保存できてしまう。(createアクションにif文を用いてないからだと考えている)

enumに関して試したこと

ruby:form.rb

1class Form < ApplicationRecord 2 enum seat: { :table, :counter }, _prefix: true (または _suffix: true)

2.ストロングパラメータの:seatの部分をいじる

仮説

・ストロングパラメータの:seatの記述を変えるとうまくいくんじゃないか
・そもそも書くモデルが間違っているんじゃないか。enum用のモデルを作るべきなんじゃないかと考えている


読んでいただきありがとうございます。
解決できそうな場合は、ぜひ伺いたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーの通り、Formクラスへtableメソッドが自動的に作成されるが、そのメソッドはすでにActiveRecord::Relationに定義済です。

なので、これで解決できると思います。

ruby

1enum seat: { :table, :counter }, _prefix: true

table席を絞り込みたい場合は、Form.seat_tableでいけます。

投稿2022/01/25 11:47

heroyct

総合スコア434

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

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

bon96

2022/01/25 12:32

ご回答ありがとうございます! 今上記でいただいた記述を試していましたが、syntax errorが出てしまっています。 「syntax error, unexpected ',', expecting => enum seat: { :table, :counter }, _prefix: true ^」のように、カンマを指摘されているようなんですが、文法は合っていると思うので他の原因を探しています。
bon96

2022/01/25 12:54

{ } を [ ] にしたらエラーを解消できました!また、相談していたエラーも出てこなくなりました!ありがとうございます。また何かありましたらよろしくお願いします🙇‍♀️
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問