読者です 読者をやめる 読者になる 読者になる

Ruby on Railsにおけるvalidation

どうもどうもこんにちは、south37です。
今若干酔っててあんま思考力無いんですけど、ぼちぼち書いていきたいと思います。
今回は、validationについてです。

validationとは?

validationについて、ちょっと前にいろいろ話題になってたみたいですけど、ざっくり言うと「システムを健全(valid)な状態をたもつ仕組み」らしいです。
で、実際の場面ではどういう使われ方をするかと言うと、getやpostで送信した値が適切かどうかを確認して、適切であれば規定の処理を行う、みたいな感じの処理をします。

で、railsにおいてはmodelにごりごりvalidatesメソッドで適切な値を指定していきます。とりあえず、コードを見ていただきましょう。

class User < ActiveRecord::Base
  has_many :territories
  attr_accessible :foursq_id, :name, :area

  validates :foursq_id, :name, :area, presence: true
  validates :foursq_id, numericality: { only_integer: true, greater_than: 0 }
  validates :foursq_id, uniqueness: true
  validates :area, numericality: { greater_than_or_equal_to: 0 }
end

上のコードは、user modelのクラス定義になります。
has_manyとかattr_accessibleとかはブログのrails初回で説明した機能を持つメソッドで、その下のvalidates ~ みたいのがvalidation用のコードになります。

一行目のvalidates ~, presence: trueってのは、そこで指定したfousq_id, name, areaっていうパラメーターがnilでなくきちんと設定されてなければならないという事を表しています。formで送信した値を使ってmodelのオブジェクトを生成する訳ですが、その際にきちんと値が入力されている事を保証する訳です。

二行目のvalidates ~, numericality ~ってのはfoursq_idが数字かつ整数かつ0より大きいという事を保証しています。numericalityってのが数字、後はまんまですね。

三行目のvalidates ~, uniquness: trueってのは、foursq_idがuniqueである事を保証しています。同じfoursq_idを持つmodelを生成出来ない(DBに保存されない)事を保証している訳です。

四行目はnumericalityってのから分かる通り、やっぱり数字である事を保証しています。ただし、0以上であるという条件もつけています。

こんな風に直感的な名前のキーが用意されていて、パッと見でどういったvalidationが行われているかが分かります。この辺はとってもクールですね。

さらに、例えばform送信した際にvalidationではじかれるとエラーを吐くのでは無く、同じページにリダイレクトしてよくある感じにvalidでない値の注意書きが出るようになっています。この辺も適切なデフォルトが用意されている訳ですね。

railsのvalidationはかなり便利で直感的なので、ぜひとも触ってみてください。
短いですが今回は以上です!!