2011-10-31
Sexy Validationは実際どうなってるのか
Rails3.0ではSexy Validationという機能があって,
class Article < ActiveRecord::Base validates( :title, {:presence => true} ) # validates_presence_of :title # と同等 end
と書ける.これは,2つ以上のフィールドに対し適用したい場合に,
class Article < ActiveRecord::Base validates( :title, body, {:presence => true} ) # validates( :title, {:presence => true} ) # validates( :title, {:presence => true} ) # と同等 end
と書ける.おそらく,validatesメソッドの引数は(*field, name_params_hash)となっているのでしょう.
が,話はそう単純ではなさそう.というのも,独自validationを定義するときは,
Sexy Validationで独自のValidationを - takkan_mのNo planな日常にあるように,以下ようにEachValidatorの子クラスを定義することになるからです.
class NgWordValidator < ActiveModel::EachValidator def validate_each(record, attribute, value) record.errors[attribute] << 'include ng word' if value =~ /NG WORD/ end end
これで利用側では
class Post < ActiveRecord::Base validates :title, :presence => true, :ng_word => true end
で利用できるというのですからおそろしい.つまりNgWordValidatorを:ng_wordキーで呼べているわけです.
なお,引数の(record, attribute, value)はそれぞれ,
record : 検証ルールを記述したクラス(ここではPostクラス)のヴァリデートされるインスタンス
attribute : 検証されるフィールド名のシンボル(ここでは:title)
value : record.attributeで返る,attributeの値
となっています.クラスとそのインスタンス変数へのアクセサとその値を入れたらtrue / falseが返る関数になっていればいいわけですね.
トラックバック - http://d.hatena.ne.jp/hackugyo/20111031/1320072919
リンク元
- 11 http://www.google.co.jp/url?sa=t&rct=j&q=the 'json' native gem requires installed build tools&source=web&cd=1&ved=0CCAQFjAA&url=http://d.hatena.ne.jp/hackugyo/20110612/1307830385&ei=C8euTpDmO6KHmQWl_6GQCA&usg=AFQjCNH_UCDJZm8t5vXK
- 8 http://www.google.co.jp/url?sa=t&rct=j&q=The+%27json%27+native+gem+requires+installed+build+tools.&source=web&cd=1&ved=0CB8QFjAA&url=http://d.hatena.ne.jp/hackugyo/20110612/1307830385&ei=63qvTvOaGNH0mAXprfSTAg&usg=AFQjCNH_UCD
- 6 http://www.google.co.jp/url?sa=t&rct=j&q=please update your path to include build tools or download the devkit&source=web&cd=1&ved=0CCUQFjAA&url=http://d.hatena.ne.jp/hackugyo/20110612/1307830385&ei=sMmuTou3M6j5mAXGteET&u
- 5 http://www.google.co.jp/url?sa=t&rct=j&q=warning: 'require 'rake/rdoctask'&source=web&cd=1&ved=0CB0QFjAA&url=http://d.hatena.ne.jp/hackugyo/20111025/1319560583&ei=cr-uTo7kD4-VmQX4442ADw&usg=AFQjCNFyBOJs6LIYHc1NCixjVAWC6Ne48w&sig2=6Ydjn
- 3 http://www.google.co.jp/url?sa=t&rct=j&q=%22The+%27json%27+native+gem+requires+installed+build+tools.%22&source=web&cd=1&ved=0CCkQFjAA&url=http://d.hatena.ne.jp/hackugyo/20110612/1307830385&ei=bzeyTq2rM-32mAX51KyAAg&usg=A
- 2 http://d.hatena.ne.jp/keyword/関数
- 2 http://ezsch.ezweb.ne.jp/search/?query=1〜9の数字を使って+数式&ct=0001&pd=1&sr=0000
- 2 http://reader.livedoor.com/reader/
- 2 http://search.minakoe.jp/rsss/rsss.asp?qry=ruby&multi=1
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=error: error installing rails:the 'json' native gem requires installed build tools.&source=web&cd=1&ved=0CCAQFjAA&url=http://d.hatena.ne.jp/hackugyo/20110612/1307830385&ei=bBWwTo