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^)



以上よろしくお願いいたします。