N-N mongoid中的附加属性(如数据透视表中所示)

时间:2015-05-21 21:08:41

标签: ruby-on-rails mongodb mongoid

我在中央和协调员之间有一个has_many_and_belongs_to关系。 所以我的mongo文件如下所示:

central = {
    _id: 1,
    title: 'First Name',
    coordinators: [
        BSON[1],
        BSON[2],
        BSON[3]
    ]
}

coordinators = [
    {
        _id: 1,
        name: 'Me',
        centrals: [BSON[1], BSON[2]]
    },
    {
        _id: 1,
        name: 'Mateus'
        centrals: [BSON[1]]
    },
    {
        _id: 1,
        name: 'Gomes'
        centrals: [BSON[1]]
    },
]

如果我这样做:

@central = Central.find(1)
@coordinator = @central.coordinators.find(1)

@coordinator.can_edit = false

它将适用于协调员文件,结果如下:

coordinator = {
    _id: 1,
    name: 'Me',
    centrals: [BSON[1], BSON[2]],
    can_edit: false
}

但我真正想要做的是在关系中应用这个can_edit属性,就像在RDBMS中的数据透视表中一样:

central = {
    _id: 1,
    titulo: 'First Name',
    coordinators: [
        {
            _id: 1,
            name: 'Me',
            can_edit: false
        },
        BSON[2],
        BSON[3]
    ]
}

仅对于id为1的中心,我想将can_edit变为false。

我必须保持中央和协调员之间的关系,但在某些情况下,我希望获得有关该关系的其他信息,例如,如果我不允许协调员仅在ID为1的中央编辑某些数据。

我怎样才能使用mongoid?

1 个答案:

答案 0 :(得分:0)

解决方法是创建另一种关系N-N:

添加 central.rb

has_and_belongs_to_many :blocked_coordenadors,
                             class_name: "Central",
                             inverse_of: :blocked_centrals

coordinator.rb

has_and_belongs_to_many :blocked_centrals,
                             class_name: "Central",
                             inverse_of: :blocked_coordenadors

要检查我这样做:

central.blocked_coordenadors.include? coordinator