はじめての質問です!
お忙しいなか、恐れいりますが、宜しくお願い致します
※質問内容にクレジットカードと記載がありますが、今回のコードはサンプルで作成しているだけなので、
自身のPCのローカル環境でのみ動かしています。
開発環境
Rails 5.0.1
Ruby 2.3.1
前提・実現したいこと
バリデーションを効かせることで、入力フォームが空欄のときに
エラーメッセージが出るようにしたい。
発生している問題
modelにバリデーションの記載をしてもバリデーションが効かない
Ruby
1 2 3class PaymentInformation < ApplicationRecord 4 belongs_to :user 5 6 validates :card_number, presence: true 7 validates :valid_year, presence: true 8 validates :valid_month, presence: true 9 validates :cvc, numericality: true 10 11end 12
HTML
1%section.payment_information-container 2 .content-title 3 %h2 クレジットカード情報入力 4 .form-content 5 .form#credit-information 6 = form_for @payment_information,url: payment_informations_path, method: :post do |f| 7 = f.label 'カード番号', class: 'label' 8 %span 必須 9 %br/ 10 = f.number_field :card_number,class: 'number',id: 'card_num' 11 = f.label '有効期限', class: 'label' 12 %span 必須 13 .selectbox 14 = f.select :valid_month,[*(1..12)],prompt:"選択してください",class: 'valid_month' 15 %p 月 16 17 .select-valid 18 = f.select :valid_year,[*18..23],prompt:"選択してください",class: 'valid_month' 19 %p 年 20 21 = f.label 'セキュリティコード', class: 'label' 22 %span 必須 23 = f.text_field :cvc, placeholder:' カード背面4桁もしくは3桁の番号',class: 'number',id: 'security_num',minumum:3, maximum:4 24 .submit-box 25 =f.submit '追加する', class: 'submit' 26
試したこと
マイグレーションファイルのカラムにnull false制約を加えてみました。
validateをvalidatesにしてみました。
あくまでサンプルだと信じたいですが、カード番号を保存するにはPCI DSSのルールに則った仕組みの構築が必要ですし、セキュリティコードは保存が一切禁止されています。
質問内容に不備があり、申し訳ございません。今回のコードはサンプルで作成しているだけなので、自身のPCのローカル環境でのみ動かしています
「バリデーションが効かない」というのはどのような状況でしょうか。「そのまま保存されてしまう」「エラーにはなるけどエラーメッセージがわからない」など、不適当な値を入れるとどうなるのか教えていただけますでしょうか。
現在の状況ですが、フォームが空欄の状態でSubmitボタンを押してもブラウザの表示が全く変わりません。モデルにpresence:trueを記述しているので、何らかのエラーメッセージが出るはずなのですが、エラーメッセージも出ません。Submitした空欄の情報はDBには保存されていない状態です。
回答3件
あなたの回答
tips
プレビュー