2011-09-05 18 views
5

Estoy intentando hacer mongoid para guardar asociaciones, pero solo puedo hacer que una de las partes trabaje. Si tengo la siguiente prueba.Mongoid has_and_belongs_to_many associations

test "should add a user as a follower when a user follows the group" do                                   
    @cali_group.followers = []                                     
    @user1.followed_groups << @cali_group                                     
    assert_equal 1, @user1.followed_groups.count 
    assert_equal 1, @cali_group.followers.count 
    end 

Cuál está fallando, porque @ cali_group.followers is []. He estado trabajando con esto por un tiempo, intenté @cali_group.reload. Pero parece que la única forma de hacer esto en mi código es trabajar ambos extremos de la unión, es decir, @cali_group.followers << @user1. Puedo hacer eso en mi código si es necesario.

Los modelos para polco_group y el usuario está aqui: https://gist.github.com/1195048

código de prueba completa es aquí: https://gist.github.com/1195052

+1

No tiene el: inverso de establecer en el lado del usuario, puede ser que eso le está causando los problemas. – rubish

+0

buen punto, voy a ver que – bonhoffer

+0

hmm. . .Todavía no funciona, pero una mejora necesaria en cualquier caso – bonhoffer

Respuesta

0

muy tarde para el espectáculo. Usando Mongoid 4.0.2 aquí. El problema también me preocupa.

El enlace de @sandrew ya no es válido. Un problema similar se informó aquí: http://github.com/mongodb/mongoid/pull/3604

La solución que encontré fue:

@cali_group.followers = [] 
@cali_group.follower_ids # Adding this line somehow does something to the cache 
@user1.followed_groups << @cali_group 

encontrado esta solución mediante la adición de un before_save en la clase de grupo y observando self.changes. Sin esta línea, el miembro follower_ids cambia de nil a []. Sin embargo, después de agregar la línea, se recibe y configura la ID correcta del usuario. Espero que ayude a cualquier lector futuro.

Cuestiones relacionadas