Ruby on Rails の学習で商品購入サイトのアプリケーションを作成しています。
その中で、ラジオボタンの選択肢によってバリデーションを実行させようとしたのですがうまく動作させることができません。
ラジオボタンの選択肢は以下のような内容です。
・商品お渡しカラム product_passing 選択肢 発送orその他
ラジオボタンの選択肢で以下のようにバリデーションを実行させようとしました。
発送が選択されたとき必須
・郵便番号カラム postal_code
・住所カラム address
・宛名 addressee
その他が選択されたとき必須
・その他受取場所 other
HTMLは以下のようなラジオボタンを作成しています。
<%= f.label :product_passing, "お渡しの方法" %><br> <%= f.radio_button :product_passing, Order.product_passings.key(0) %> <%= f.label :product_passing, Order.product_passings_i18n[:delivery] %> <%= f.radio_button :product_passing, Order.product_passings.key(1) %> <%= f.label :product_passing, Order.product_passings_i18n[:other] %>
モデルのバリデーションは以下の通りです。
if文を使用して実装できるのではないかと考えこのような設定にしました。
enum product_passing: { delivery: 0, other: 1} validates :product_passing, presence: true if :product_passing == "delivery" validates :postal_code, presence: true, format: { with: /\A\d{3}[-]?\d{4}\z/ } validates :address, presence: true validates :addressee, presence: true, length: { maximum: 50 } else validates :other, presence: true, length: { maximum: 20 } end
試したこと
エラーは出ないのですが「その他が選択されたとき必須」の方だけ動作しているので
一致していないと判断されelse以下が実行されたと思い、
以下の箇所の値を変更するなど試しているのですがうまくいきませんでした。
if :product_passing == "delivery"
そもそも、モデルではなくコントローラ側で判断させてinvalid?で実行させることができるのでは?
などの疑問も出てきたので色々と調べているところではありますが、いまいち理解できずにおります。
大変恐れ入りますが、ご教示のほどよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/12 10:08