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