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 とかで制限することになるんでしょうか。
今のところ譲渡するようなロジックを組む予定はないですが、こういう所は埋込みにするなり考えないとダメですね。