@kyanny's blog

My thoughts, my life. Views/opinions are my own.

MongoMapper の abbr

stackoverflow.com

  • 別名のアトリビュートメソッドが定義される(エイリアス)
  • データベースのコレクションには abbr で指定したフィールド名で保存される
    • データマイグレーションが必要なフィールド名の変更を無停止でやる、みたいなときに便利かもしれない
    • 自分のユースケースでは、 ActiveSupport::Concern を使った mixin で定義されるメソッドの中から参照するフィールド名が違う、みたいなときうまい具合に使えた
require 'mongo_mapper'

MongoMapper.database = 'testing'

class Person
  include MongoMapper::Document
  key :given_name, String, abbr: :first_name
  key :sur_name, String, abbr: :last_name
end

john = Person.create(first_name: 'John', last_name: 'Doe')
john.first_name #=> "John"
john.given_name #=> "John"
Person.create(given_name: "Melody", sur_name: "Nelson")
Person.all
[#<Person _id: BSON::ObjectId('554e3e7c421cdc660c000002'), given_name: "John", sur_name: "Doe">,
 #<Person _id: BSON::ObjectId('554e3eba421cdc660c000003'), given_name: "Melody", sur_name: "Nelson">]

Mongo Shell

> db.people.find()
{ "_id" : ObjectId("554e3e7c421cdc660c000002"), "last_name" : "Doe", "first_name" : "John" }
{ "_id" : ObjectId("554e3eba421cdc660c000003"), "last_name" : "Nelson", "first_name" : "Melody" }