2011-06-18 12 views
6

El escenario es:1 - N relaciones en MongoId (rieles)

¿Cómo se puede dar una cuenta a otra cuenta de calificaciones? Esto da como resultado dos listas en la Cuenta. Los que he calificado y los que me han calificado. (my_ratings y ratings_given)

esto se reduce a:

Cómo puede múltiple 1 - N relationsips a la misma obra entidad en Mongoid?

In Mongoid's Docs dice que puede usar has_many y belongs_to para unir las entidades.

actualmente tienen esto en cuenta

has_many :ratings, :as => "my_ratings" 
    has_many :ratings, :as => "ratings_given" 

y esto en Calificaciones:

belongs_to :user, :as => 'Rater' 
belongs_to :user, :as => 'Ratie' 

Los documentos no cubren este caso, así que pensé que tendría que diferenciar entre los dos con un: como parámetro.

¿Es esto remoto?

Respuesta

18

Puede lograr lo que desee mediante la class_name y inverse_of opciones:

class Account 
    include Mongoid::Document 
    field :name 
    has_many :ratings_given, :class_name => 'Ratings', :inverse_of => :rater 
    has_many :my_ratings, :class_name => 'Ratings', :inverse_of => :ratee 
end 

class Ratings 
    include Mongoid::Document 
    field :name 
    belongs_to :rater, :class_name => 'Account', :inverse_of => :ratings_given 
    belongs_to :ratee, :class_name => 'Account', :inverse_of => :my_ratings 
end 

La documentación ha cambiado desde la última vez de trabajar con él, así que no estaba seguro de si esto sigue siendo el método recomendado. Parece que no menciona estas opciones en el 1-many referenced page. Pero si echa un vistazo a la página general en relations están cubiertos allí.

En cualquier caso, debe vincular explícitamente las asociaciones ratings_given/rater y my_ratings/ratee cuando hay dos asociaciones en la misma clase, de lo contrario, mongoid no tiene manera de saber cuál de las dos inversas potenciales debe elegir.

+0

Es importante tener en cuenta que cuando tiene relaciones múltiples, todas deben obtener un: inverso de la declaración, en ambos lados. De lo contrario mongoid se confunde. –

Cuestiones relacionadas