2011-06-18 36 views
6

Kịch bản là:Hai 1 - N quan hệ trong Mongoid (Rails)

Làm thế nào một tài khoản có thể cung cấp cho xếp hạng vào tài khoản khác? Điều này dẫn đến hai danh sách trên Tài khoản. Những người tôi đã xếp hạng và những người đã xếp hạng tôi. (My_ratings và ratings_given)

này nắm tới:

Làm thế nào có thể nhiều 1 - N relationsips đến công việc cùng một thực thể trong Mongoid?

In Mongoid's Docs nó nói bạn có thể sử dụng has_manybelongs_to để liên kết các thực thể với nhau.

Tôi hiện đang có trên Tài khoản

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

và điều này trên Ratings:

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

Các tài liệu không bao gồm trường hợp này, vì vậy tôi nghĩ bạn sẽ phải phân biệt giữa hai với một tham số: as.

Tính năng này thậm chí còn được điều khiển từ xa?

Trả lời

18

Bạn có thể đạt được những gì bạn muốn sử dụng class_name và inverse_of lựa chọn:

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 

Các tài liệu đã thay đổi từ khi tôi còn làm việc cuối cùng với nó vì vậy tôi đã không chắc chắn cho dù đây vẫn là phương pháp được khuyến cáo. Có vẻ như nó không đề cập đến các tùy chọn này trên 1-many referenced page. Nhưng nếu bạn nhìn vào trang chung trên relations chúng được bao phủ ở đó.

Trong mọi trường hợp, bạn cần liên kết rõ ràng các kết hợp xếp hạng_given/rater và my_ratings/ratee khi có hai liên kết đến cùng một lớp, nếu không mongoid không có cách nào biết được hai trong số đó có thể chọn.

+0

Điều quan trọng cần lưu ý là khi bạn có nhiều mối quan hệ, tất cả phải nhận được: tuyên bố inverse_of, ở cả hai bên. Nếu không mongoid bị lẫn lộn. –

Các vấn đề liên quan