mazinlabsのブログ

RubyとかCloudとかその辺の記事を書いたり書かなかったり

Rails3でMongoid使ってみた

最近MongoDBに興味があるのでRails3から触ってみることにした。


今回はObject-Document-Mapper(ODM)にMongoidを使ってみる。
前にMongoDBのODMにMongoMapperを使おうとしていたのだが、うまくインストールできなかったことがあった。
MongoDB触ってみる - 情報技術漫才誌


その時コメントでid:Kirikaさんから「Mongoidのほうがオヌヌメ」と言われて調べてみたら確かにMongoidが(検索数的に)よさげだったのでMongoidを使ってみることに。


前回のMongoMapper挑戦時にMongoDBがすでにインストール済みなので、インストールはこれだけ。

% gem install mongoid -r

Railsから使うのであればGemfileに書いておく。

% vim Gemfile
gem 'mongoid'を追加して保存
% bundle install

準備ができたらgenerateを使ってモデルを作成

% rails generate model model_name

Mongoid config not found. Create a config file at: config/mongoid.yml
to generate one run: rails generate mongoid:config


Mongoid preload_models is set to false. If you are using
inheritance in your application model please set this to true or
you will experience querying inconsistencies in dev mode. Note that
this will severely decrease performance in dev mode only.

      invoke  mongoid
      create    app/models/model_name.rb
      invoke    test_unit
      create      test/unit/model_name_test.rb
      create      test/fixtures/model_names.yml

作ったモデルの確認

%vim app/models/model_name.rb
class ModelName
  include Mongoid::Document
end

モデルにinclude Mongoid::Documentがされているのがわかる。


ちなみにモデルを削除する場合はdestroyを使ってモデルを削除

% rails destroy model model_name

Mongoid config not found. Create a config file at: config/mongoid.yml
to generate one run: rails generate mongoid:config


Mongoid preload_models is set to false. If you are using
inheritance in your application model please set this to true or
you will experience querying inconsistencies in dev mode. Note that
this will severely decrease performance in dev mode only.

      invoke  mongoid
      remove    app/models/model_name.rb
      invoke    test_unit
      remove      test/unit/model_name_test.rb
      remove      test/fixtures/model_names.yml


あとデフォルトでtimestampを使えるみたいなのでそっちも使ってみる。

% rails generate model model_name --timestamps=true

Mongoid config not found. Create a config file at: config/mongoid.yml
to generate one run: rails generate mongoid:config


Mongoid preload_models is set to false. If you are using
inheritance in your application model please set this to true or
you will experience querying inconsistencies in dev mode. Note that
this will severely decrease performance in dev mode only.

      invoke  mongoid
      create    app/models/model_name.rb
      invoke    test_unit
      create      test/unit/model_name_test.rb
      create      test/fixtures/model_names.yml

timestamp付きのモデルを確認。

%vim app/models/model_name.rb
class ModelName
  include Mongoid::Document
  include Mongoid::Timestamps
end

とりあえず今日はこれだけ。


ログを見てると"config/mongoid.ymlがないからrails generate mongoid:configしろ!"って書いてあるので後でしておく。


参考:Mongoid generate - 初学開発記録帖