Ruby on Rails
モンゴイド
サーチ…
インストール
まず、あなたのGemfile
Mongoid
を追加してください:
gem "mongoid", "~> 4.0.0"
bundle install
ます。または単に実行する:
$ gem install mongoid
インストール後、ジェネレータを実行して設定ファイルを作成します:
$ rails g mongoid:config
ファイル(myapp)/config/mongoid.yml
を作成します。
モデルの作成
以下を実行してモデルを作成します( User
と呼ぶことができます)。
$ rails g model User
app/models/user.rb
というファイルが生成されます:
class User
include Mongoid::Document
end
これはあなたがモデルを持つために必要なものです( id
フィールドだけですが)。 ActiveRecord
とは異なり、移行ファイルはありません。モデルのすべてのデータベース情報は、モデルファイルに含まれています。
タイムスタンプは、生成時にモデルに自動的に含まれません。 created_at
とupdated_at
をモデルに追加するには、
include Mongoid::Timestamps
下のモデルにinclude Mongoid::Document
があります。
class User
include Mongoid::Document
include Mongoid::Timestamps
end
フィールド
Mongoidドキュメンテーションによれば 、16の有効なフィールドタイプがあります:
- アレイ
- BigDecimal
- ブール
- 日付
- 日付時刻
- 浮く
- ハッシュ
- 整数
- BSON :: ObjectId
- BSON ::バイナリ
- 範囲
- 正規表現
- 文字列
- シンボル
- 時間
- TimeWithZone
フィールドを追加するには( name
を付けてString
します)、これをモデルファイルに追加します。
field :name, type: String
デフォルト値を設定するには、 default
オプションを渡します:
field :name, type: String, default: ""
クラシック協会
Mongoidは古典的なActiveRecord
関連付けを可能にします:
- 1対1:
has_one
/belongs_to
- 1対多:
has_many
/belongs_to
- 多対多:
has_and_belongs_to_many
アソシエーションを追加するには(User has_many
postsとします)、これをUser
モデルファイルに追加します:
has_many :posts
これをPost
モデルファイルに追加します:
belongs_to :user
これにより、 Post
モデルのuser_id
フィールドが追加され、 Post
クラスにuser
メソッドが追加され、 User
クラスにposts
メソッドが追加されます。
組込み組合
Mongoidは組み込み関連を許可します:
- 一対一:
embeds_one
/embedded_in
- 1対多:
embeds_many
/embedded_in
アソシエーションを追加するには(User embeds_many
アドレスを指定します)、これをあなたのUser
ファイルに追加します:
embeds_many :addresses
これをあなたのAddress
モデルファイルにAddress
ます:
embedded_in :user
これは埋め込みますAddress
、あなたの中User
の追加、モデルをaddresses
あなたに方法をUser
クラス。
データベース呼び出し
Mongoidは可能なときにActiveRecord
と似た構文をしようとします。これらの呼び出しをサポートしています。
User.first #Gets first user from the database
User.count #Gets the count of all users from the database
User.find(params[:id]) #Returns the user with the id found in params[:id]
User.where(name: "Bob") #Returns a Mongoid::Criteria object that can be chained
#with other queries (like another 'where' or an 'any_in')
#Does NOT return any objects from database
User.where(name: "Bob").entries #Returns all objects with name "Bob" from database
User.where(:name.in => ['Bob', 'Alice']).entries #Returns all objects with name "Bob" or "Alice" from database
User.any_in(name: ["Bob", "Joe"]).first #Returns the first object with name "Bob" or "Joe"
User.where(:name => 'Bob').exists? # will return true if there is one or more users with name bob