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用のモデルを作るべきなんじゃないかと考えている
読んでいただきありがとうございます。
解決できそうな場合は、ぜひ伺いたいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/25 12:32
2022/01/25 12:54