事前に
今回は
Rails4のプロジェクトにMongoDBを使いたい時の設定についてです。
mongoidを使います。
最終的にはHerokuに上げたいので、HerokuではMongoLabを使います。他にもMongoHQとかがあります。
HerokuでMongoを使うには、クレジットカードなどのアカウント認証が必要になりますが、概ね無料で使えます。
MongoLabでは約500MBが無料で使えます。
Gemfile
# Mongo on Heroku
gem 'mongoid', '4.0.0.beta1'
gem "bson"
gem "moped", github: "mongoid/moped"
config/mongoid.yml
$ rails generate mongoid:config
上記コマンドにより、config/mongoid.ymlが生成されます。
development, testの設定があるので、それをいじったりstagingやproductionの設定を追加します。
・
・
production:
sessions:
default:
uri: <%= ENV['MONGOLAB_URI'] %>
・
・
Railsプロジェクト
このままだと、ActiveRecordのmodelを作るとき、active_record:とprefixをつける必要がある。
Railsのデフォルト設定がmongodbを使う様になってしまっている。
$ rails generate acrive_record:model
(mongoの方は、rails g model hoge:integer でいける)
これだとActiveRecordを基本的に使いたい場合には不自由なので、
config/application.rbに
config.generators do |g|
g.orm :active_record
end
このときmongoを使うモデルを作るときは
$ rails generate mongoid:model MODEL_NAME column_name:column_type
でOK。プレフィックスが要る。
Modelの設定
MongoDBを使いたいモデルに書き書き
class hoge
include Mongoid::Document
field :fuga_id, type: Integer
field :time, type: Time
end
ダメな例
class hoge
include Mongoid::Document
field :fuga_id, type: Integer,
field :time, type: Time
end
end
こんな感じでカンマがあるとエラります。syntax error
rails g mongoid:model user_id:integer とかやってくとカンマが入っちゃうので、属性の指定はコマンドではせず、あとからモデルに書き込むといいかも。(あいまいです)