モデルに依存しないフィールドを検証する。

railsの数多ある超便利機能のひとつに、検証、validateがある訳ですが。


これって、モデルに保存する時にしか、検証が行われない訳ですよ。
つまりは、ActiveRecordの処理の際、ですね。
でも、時として、モデルには無いものを検証したいこともある訳ですわ。


で、ちょっと前にmixiのコミュニティで、そんな話題があがっていて、「ActiveFormを使うのが常道」ってなってたんだけど。


う〜ん、例えば、モデルに依存した、ひとつのフォームに入力するとして、

  • そのモデルには依存しない、ひとつのフィールドに対応する、複数のラジオボタンのフィールドがあります。
  • そのラジオボタンの値によって、判定分岐します。
  • そのラジオボタンの初期値はfalseです。
  • そのラジオボタンの内のどれかを、選択していない場合、モデルにおける検証と同じ扱いで、エラーを返します。


...さて、どうしましょう?
ActiveFormだと、AciveRecordとは別でフォームを作ることになってしまうし、そも、そんな大層な事をする必要は、全く以てナッシングな訳ですよ。


まあ、結論としては、「ビューにおいて、モデルに依存しているフォームをform_forで作って、その中にradio_button_tagで、モデルに依存しないフィールドを作って、受け側(反対語は"攻め側"じゃないぞっ)で、pramas[:hogehoge]で判定して、falseなら、モデル.errors.add_to_base("どれか選ばんかいゴルァ")で、エラー・メッセージを追加する」ということで解決しました。


いや、こういうのって、Google先生に聞いても、なかなか的を得た回答が得られなくって、困るよね?
あんまり、こういうこと、考える人がいないのかね?


フレームワークって、沢山のお気楽便利機能が詰まっている訳ですが。
今回の場合だと、モデルの保存時における検証機能、ですね。


で、その機能は、こっちが何もしなくても、追加されていたりなんかする訳ですよ。
で、かってに追加されているんで、そこに介入出来る、という発想が、すぐさま湧かなかったりなんかする訳ですね。


シーケンシャルに進行している処理の途中に割り込む、ということが。


で、他のフレームワークなんて、触ったことも無いんでどうだかは知らないんだけどwww
少なくとも、railsは、それができる。
つうか、ね?
多分、元からあるvalidate_of_hogehogeって、みんな、errors.add_fugafuga()で、エラー・メッセージを追加してるんだと思うんだよね。


一つの大きな流れを作るんじゃなくって、ホンの小さな流れを一杯作って、それを集めて、大きな流れに組み上げる、みたいな。
だから、どれかの小さな流れを書き換えたり、小さな流れに更に支流を付けたり、が、簡単に出来るんだね。


ステキ、だね。