LoginSignup
5
5

More than 5 years have passed since last update.

Mongolab のデータを Rails から mongoidを使って参照する方法

Posted at

mongolab にPythonからつっこんだデータを、Ruby on rails から参照しようと思いました。標準のActive Record と同じように扱えるよう、mongoid を使ってマッピングして使います。

mongolab

mongolabは、mongoDB ホスティングサービスです。Daas(Database as a Service)です。500MB の容量まで無料で使えます。また、レコードした情報はウェブサイトから見ることが出来ます。

MongoDB

MongoDBは、データベースです。MySQLやpostgreSQLと異なり、スキーマレスデータベースという分類のもので、先にどういうデータを入れるか?を定義しなくて良いものです。JSONのようなデータ構造を保存します。

Mongoid

Rails 内でいつもどおりモデルを扱えるようにマッピングするGem。

導入方法

既にプロジェクトは構築済みとして、モデルクラスの生成から説明します。
詳しくはこちら。バージョンは最新の5を説明しています。他のバージョンだと設定などが異なるのでご注意ください。

準備

まずはgemの導入

Gemfile
gem 'mongoid', '~> 5.0.0'

bundle installしたあと、configファイルを作成します。
$ rails g mongoid:config
このままですと、rails g modelなどのコマンドでmongoidが標準になっていますので、標準を戻したい場合は

config/apprication.rb
config.generators do |g|
  g.orm :active_record
end

とする。こうすれば、何も指定せずrails gコマンドを実行すれば、通常通りactive record 用のファイルが生成されます。
mongolab用のモデルを生成したい場合は、rais g mongoid:modelなどとプレフィックスを付けてください。

生成された config/mongoid.yml で、各環境ごとの設定を行います。

config/mongoid.yml
development:
  clients:
    default:
      database: データベース名
      hosts:
        - ドメイン名:ポート番号
      # The name of the user for authentication.
      user: 'user'

      # The password of the user for authentication.
      password: 'password'

ドメイン名とポート番号は、mongolabのものを、データベース名はmongolabで作成したものを指定してください。また、上記のようにuser、passwordを入力。

modelの生成

準備が終わったらモデルクラスを生成。ここで、model名は単数形にする。sで終わるものを複数形と判断してしまうようなので、statusのばあいは、statu と指定する。(回避方法はこちら参照)

$ rails g mongoid:model statu

すると、Mongoid::Documentをインクルードしたモデルが生成される。

app/models/statu.rb
class Statu
  include Mongoid::Document
end

ここに、フィールドを設定していく。

app/models/statu.rb
class Statu
  include Mongoid::Document
  field :name, type: String
  field :status, type: String
end

これで、model内などで

app/controllers/hogehoge_controller.rb
  @status = Statu.all

として、viewで

app/views/hoges/hogehoge.html.erb
  <%= @status.first.name %>

などのコマンドを使えるようになります。

5
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5