Rails+MongoでSexy Validationする方法
こんにちは。
最近社内ニートですることないのでRails+Mongoやってます。
Railsとか言ってるけどもともとPHPしかできないゆとりなんで、まず最初のRails+MySQLで色々つまづいたりもしてますが、私は元気です。
PHPer(しかも独自FW派)がRailsに惚れ込むまでのエントリを書きたいところですが、大長編になりそうなので今回はあんまり日本語のヘルプに引っかからなかったMongoでSexy Validationやる件についてはまりどころを書きます。
Rails3からSexy Validationが導入され、モデルに
みたいのを書けばバリデーションしてくれるようになりました。validates :userid, :presence => true
なんて偉そうなこと書いてますが、そもそもRails2を知らないので、「一行書き足すだけでチェックしてくれるなんて超便利!」と素直に感動してますごめんなさい。
で、これを日本語化するには
https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/ja.yml
をlocales/にぶち込めばいいっていうのが常識ですが、これだとフィールド名が日本語名にならないので別途ja.ymlで
とかやります。
activerecord:
attributes:
hogehoge:
userid: ユーザーアイディー
でもmongo_mapperはActiveRecordを使わないのでこれが使えません。
なのでまず使いたいモデルでValidationsが使えるよう、ActiveModel::alidationsをextendします。
たとえば今回はhogehogeモデルなので、モデルの先頭にこんな感じで追記します。
class Hogehoge
include MongoMapper::Document
extend ActiveModel::Validations ←追記した
validates :userid, :presence => true ←Validation項目key :userid, String ←Mongoのドキュメント項目
end
次にlocale/ja.ymlのactiverecordの部分をmongo_mapperに書き換えます。(別にja.ymlじゃなくてもいい)
mongo_mapper:
attributes:
hogehoge:
userid: ユーザーアイディー
ほら、ちゃんと動いた!(画像略)
Rails+Mongoはあんまり日本語のヘルプがなくて困りますが、時間が余ってる時は英語のサイトを探しまくるのも楽しいです。
今回はstackoverflowの下のページを参考にしました。
http://stackoverflow.com/questions/3465481/whats-the-way-to-translate-model-attributes-in-rails-with-mongoid
これによればmongoid:で動いたよ!って言ってますがmongoidっていうgemがあるんですかね?
ゆとりだからわかんないや(^q^)
以上よろしくお願いいたします。