有没有办法在MongoMapper中使用associations
插件在类之间创建多对一关联?这是我的尝试。
class Foo
include MongoMapper::Document
end
class Bar
include MongoMapper::Document
key :foo_id, ObjectId
one :foo, :in => :foo_id
end
此实现不起作用,因为one
方法假设一对一关联,并且只允许单个Bar
实例包含特定Foo
的ID。
foo = Foo.new
bar1 = Bar.new
bar1.foo = foo
bar2 = Bar.new
bar2.foo = foo
bar1.foo #=> nil :(
我不想在Foo
类中创建一对多关联,因为它不应该知道Bar
。
只需存储foo_id
即可,但Bar#foo
方法非常有用。
答案 0 :(得分:1)
我一直在寻找这个问题的答案,但找不到任何明确的答案。我最终在我的模型中添加了一个方法来运行手动连接。以下是代码在您的示例中的样子:
class Foo
include MongoMapper::Document
end
class Bar
include MongoMapper::Document
key :foo_id, ObjectId
def foo
Foo.find(foo_id)
end
def foo=(a_foo)
foo_id = a_foo.id
end
def serializable_hash(options = {})
hash = super(options)
hash.merge({'foo' => foo.serializable_hash})
end
end
foo = Foo.new
bar1 = Bar.new
bar1.foo = foo
bar2 = Bar.new
bar2.foo = foo
bar1.foo # Should return expected value