enumによるエラーを解決したいです
解決したいエラー
飲食店のwebサイトを作りたく、予約システムを実装中
・「席指定」の項目をenumを用いてDBに保存しようとしています
現在のVsコードの記述↓
<マイグレーション>
ruby
class CreateForms < ActiveRecord::Migration[6.0] def change create_table :forms do |t| t.string :last_name_kana, null: false t.string :first_name_kana, null: false t.string :phone_number, null: false t.string :number_of_people, null: false t.integer :seat, null: false, default: 0 t.datetime :datetime, null: false t.timestamps end end end
<コントローラー>
ruby
class FormsController < ApplicationController def index @form = Form.new end def create @form = Form.new(form_params) end private def form_params params.require(:form).permit(:last_name_kana, :first_name_kana, :phone_number, :number_of_people, :seat, :datetime) end end
<モデル>
ruby
class Form < ApplicationRecord enum seat: { table: 0, counter: 1} with_options presence: true do validates :last_name_kana, format: { with: /\A[ァ-ヶー-]+\z/, message: 'is invalid. Input full-width characters.'} validates :first_name_kana, format: { with: /\A[ァ-ヶー-]+\z/, message: 'is invalid. Input full-width characters.'} validates :number_of_people, numericality: { only_integer: true, message: 'is invalid. Input only number'} validates :datetime end VALID_PHONE_REGEX = /\A\d{10}$|^\d{11}\z/ validates :phone_number, presence: true, format: { with: VALID_PHONE_REGEX } validates :phone_number, numericality: { only_integer: true, message: 'is invalid. Input only number' } end
enumを用いるために行った記述
1つめ
ruby:form.rb
class Form < ApplicationRecord enum seat: { table: 0, counter: 1}
2つめ
ruby:Gemfile
gem "enum_help"
bund installしました
3つめ
ruby:config>locales>ja.yml
ja: enums: form: seat: table: テーブル席 counter: カウンター席
今回の問題点
・予約フォームへ遷移するとき、保存するときにエラーが出る
・リロードすると、エラーが出なくなり、DBに保存もできる
予約システム自体の問題点(今回は質問に含みません)
・値が空でも保存できてしまう。(createアクションにif文を用いてないからだと考えている)
enumに関して試したこと
ruby:form.rb
class Form < ApplicationRecord enum seat: { :table, :counter }, _prefix: true (または _suffix: true)
2.ストロングパラメータの:seatの部分をいじる
仮説
・ストロングパラメータの:seatの記述を変えるとうまくいくんじゃないか
・そもそも書くモデルが間違っているんじゃないか。enum用のモデルを作るべきなんじゃないかと考えている
読んでいただきありがとうございます。
解決できそうな場合は、ぜひ伺いたいです。
まだ回答がついていません
会員登録して回答してみよう