1

有没有办法使用associationsMongoMapper 中的插件在类之间创建多对一关联?这是我的尝试。

class Foo
    include MongoMapper::Document
end

class Bar
    include MongoMapper::Document

    key :foo_id, ObjectId
    one :foo, :in => :foo_id
end

此实现不起作用,因为该one方法假定一对一关联并且仅允许单个Bar实例包含特定的 id Foo

foo = Foo.new

bar1 = Bar.new
bar1.foo = foo

bar2 = Bar.new
bar2.foo = foo

bar1.foo #=> nil :(

我不想在课堂上创建一对多关联,Foo因为它不应该包含Bar.

简单地存储 afoo_id是可能的,但该Bar#foo方法非常有用。

4

1 回答 1

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
于 2014-02-12T19:52:26.900 回答