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

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

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

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

Ruby

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

Q&A

解決済

1回答

277閲覧

カスタマイズしたエラーメッセージだけ表示させたいが、標準のエラーメッセージも表示されてしまう

pecchan

総合スコア592

Ruby on Rails 5

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

Ruby

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

0グッド

0クリップ

投稿2023/09/08 06:02

編集2023/09/08 07:43

実現したいこと

エラーメッセージをカスタマイズして、
セレクトボックスが未選択の場合は、
「〜を入力してください。」
じゃなく
「〜を選択して下さい」
にしたい。

発生している問題・エラーメッセージ

セレクトボックスが未選択だった場合に、カスタマイズしたメッセージだけ表示したいが、メッセージが余計に出力されてしまう。

メーカーを選択して下さい メーカーを入力してください。

該当のソースコード

model

ruby

1 2 validates :smart_lock_provider, presence: {message: "を選択して下さい"} 3 4 belongs_to :smart_lock_provider 5

view

haml

1= f.label :smart_lock_provider_id, 'メーカー' 2 = f.collection_select :smart_lock_provider_id, SmartLockProvider.all, :id, :name, {include_blank: "メーカーを選択してください"}, {id: "smart_lock_door__smart_lock_provider__select", name: "smart_lock_door[smart_lock_provider_id]"} 3 %p

ja.yml

ja: activerecord: models: smart_lock_door: ドアマスタ attributes: smart_lock_door: smart_lock_provider: メーカー

試したこと

2パターン試しました。

エラーメッセージをカスタムする方法

yml

1ja: 2 activerecord: 3 models: 4 smart_lock_door: ドアマスタ 5 attributes: 6 smart_lock_door: 7 smart_lock_provider: メーカー 8 errors: 9 models: 10 smart_lock_door: 11 attributes: 12 key: 13 blank: ほげほげ 14 smart_lock_provider: 15 blank: を選択して下さい

カスタムバリデーションを使う方法

model

ruby

1 def hoge 2 if smart_lock_provider.blank? 3 errors.add(:smart_lock_provider, 'を選択して下さい。') 4 end 5 end

いずれも変わりませんでした。

モデルのアソシエーション部分の影響でエラーメッセージが追加されてるのでは?と予想してますが回避策が分かりません。。。

belongs_to :smart_lock_provider

どうすれば余計なメッセージを出力させなくできるでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

Rails5以降ですね?
ですと
belongs_to :smart_lock_providervalidates :smart_lock_provider, presence: true を生成します。
ので、smart_lock_provider, presence: true に関するvalidationが2つできたので、エラーメッセージもそれぞれの分が出力されます。
メーカーを入力してください。 はこの自動生成のvalidation の分です。

投稿2023/09/08 13:05

winterboum

総合スコア23645

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

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

pecchan

2023/09/08 13:25 編集

記載漏れすみません。5.2です。 やはりbelongs_to の分ですよね。 このアソシエーションは設定しつつエラーメッセージをカスタマイズ(自動生成のvalidationの分をカスタマイズ)ってのは出来ないものなのでしょうか? であれば諦めようと思います。
winterboum

2023/09/08 13:26

belongs_to に optional: true をつけると validation は作らなくなります。
pecchan

2023/09/08 21:51

有難う御座います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問