2 日間散々悩んで、activemodel の errors.rb を読み、カスタムバリデーションまで作った挙句、結局できなかった。
以下、xxか月後の自分に向けたメモ。
やりたいこと
パスワードの変更画面があって、新しいパスワードの入力欄と再入力の欄を用意している。
新しいパスワードの入力欄と再入力の欄の内容が違う場合に、
「新しいパスワードと再入力のパスワードが一致していません。」
という固定のメッセージをエラーメッセージとして出したい。
やったこと
入力フォームの各項目の名称を、それぞれ、
「新しいパスワード」
「再入力のパスワード」
と定義して validates の confirmation を使ってみたところ、出たメッセージは、
「再入力のパスワードと新しいパスワードが一致していません。」
...。惜しい。でも逆にしたいの..。
一瞬、項目の定義を逆にすることが頭によぎったけれども、さすがにいやいやと思い直してのそこからが長かった。
結局、以下のようにしてみたけど、逆にした方がまだかえって良かったかもしれぬ。
わからなかったこと
- 項目の名称をプログラム内で動的に空にする方法。
- エラーメッセージの既定の format: ! '%{attribute}%{message}' をプログラム内で動的に上書きする方法。(errors.format は private だって言われて書き換えられなかった..。)
すごい小さいことだけど、これはきっと、使う人と作る人のギャップの話(使う人には簡単だと思うけど作る人には難しい)の典型なのかなー、と思ったりしました。
でも単に、フレームワークの中身をわからないまま使うんじゃない、という話の様な気はする。