My Brain is Open.

思いついたことを適当に列列と

references_oneの挙動

MongoDBの(埋め込みでない)参照を用いる references_one の挙動について。

class Person
  include Mongoid::Document
  field :name
  references_one :car
end

class Car
  include Mongoid::Document
  field :name
  referenced_in :person
end

モデルがこうなっているときに、次のような車の取り合いをやってみますw

p1 = Person.new(:name => "hoge") # => BSON::ObjectId('...000001')
p2 = Person.new(:name => "fuga") # => BSON::ObjectId('...000002')
c = Car.new(:name => "toyoda") # => BSON::ObjectId('...000003')

p1.car = c
p1.save #=> true
c.save #=> true
c.person_id #=> BSON::ObjectId('...000001')

p2.car = c
p2.save #=> true
c.person_id #=> BSON::ObjectId('...000002')

p1.car == c #=> true

参照される側で参照元IDを取得できるのですが、それは一旦最新のものに置き換わってしまうようです。
一方で、ちゃんと参照元から車を参照できることに変わりはない…と。
そうなると、場合によっては validates_uniqueness_of :car とかで制限することになるんでしょうか。
今のところ譲渡するようなロジックを組む予定はないですが、こういう所は埋込みにするなり考えないとダメですね。