Strong Parametersは仕組みとしてコントローラで入力パラメータのバリデーションを推奨。 params.require(:user).permit(:name, :email) my_params_validate(params) または paramsオブジェクトからバリデーションメソッドを呼ぶ様に拡張 params.require(:user).permit(:name, :email).validate(self)
- 「コントローラで入力パラメータのバリデーションを推奨」している大垣さんにとって、Strong Parameters がそれっぽいものに見えた
- これはよいものだと講演で取り上げた
- しかし、実際には単なるフィルタだった(大垣さんが定義するところのバリデーションではなかった)
- バリデーションメソッドを別途追加しなければ辻褄が合わなくなった
という流れ。
とはいえ、こうしたメソッドをRailsコアチームに提案して、首尾よく実装されたら、それはそれで素敵なことだと思う。
追記(2013-07-19)
おおもとのスライドの28ページに、「追加するだけ」との吹き出しを伴って、.validate(self) の記述が追加された。
「追加するだけ」といえばそうなのだろうが、そのようなメソッドを自前で追加しなければならないこと自体、「コントローラで入力パラメータのバリデーションを推奨」などされていない証拠ではないのか。
いずれにしても、Strong Parameters が、大垣さんの想定するバリデーション処理でないことはもはや明らかだ。バリデーション処理でない Strong Parameters がコントローラに組み込まれたからといって、どうして「仕組みとしてコントローラで入力パラメータのバリデーションを推奨」などといえるのか。
現に、Integrate strong_parameters in Rails 4 by guilleiguaran ・ Pull Request #7251 ・ rails/rails ・ GitHub を見れば、モデルによるバリデーションに、DHHが不満を感じていないことが分かる。
