MongoMapper中的多对一关联

时间:2013-02-19 08:26:17

标签: ruby mongodb mongomapper

有没有办法在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方法非常有用。

1 个答案:

答案 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