2012-06-19 29 views
5

tôi có đoạn mã sau trong mô hình đường ray công ty: Mô hìnhlàm thế nào để làm cho công việc mối quan hệ has_and_belongs_to_many trong mongoid

class Company 
    include Mongoid::Document 
    include Mongoid::Timestamps 

    field :name,  type: String 
    ... 
    has_and_belongs_to_many :users 
end 

User:

class User 
    include Mongoid::Document 
    include Mongoid::Timestamps 
    include ActiveModel::SecurePassword 

    field :email,   type: String 
    ... 
    has_and_belongs_to_many :companies 
end 

Có một công ty thu âm trong cơ sở dữ liệu, và một hồ sơ người dùng và chúng được liên kết. Đối với một số lý do, đoạn code sau không làm việc:

c = Company.first 
c.users # returns empty array 

tương tự, mã followign không hoạt động:

u = User.first 
u.companies 

Nhưng đoạn mã sau CO làm việc:

c = Company.first 
user = User.find c.user_ids.first 

và mã sau cũng hoạt động:

u = User.first 
company = Company.find u.company_ids.first 

vì vậy nếu tôi cố gắng truy cập người dùng từ company.users, nó không hoạt động, nhưng mảng user_ids không có danh sách id người dùng và khi tôi cố gắng truy cập vào người dùng từ danh sách này, nó hoạt động. Làm thế nào tôi có thể khắc phục vấn đề này?

tôi đang sử dụng đường ray 3.2.5 và mongoid 3.0.0.rc

+0

Tôi nhận thấy rằng khi tạo liên kết bằng 'user.companies << company', tôi nhận' user.companies' như mong đợi nhưng 'company.users' hoạt động khác, trả về truy vấn. Tôi có thể thấy mảng đó bằng cách gọi 'company.users.all.to_a'. Sau đó tôi gọi là 'company.users << user2' điều này thực sự có vẻ lộn xộn với các hiệp hội. – Baruch

+0

Rất muộn cho chương trình. Cách giải quyết này đã làm điều đó cho tôi: http://stackoverflow.com/questions/7308539/mongoid-has-and-belongs-to-many-associations/36282420#36282420 –

Trả lời

2

Tôi có chính xác cùng một vấn đề;) Hãy chắc chắn rằng bạn đang sử dụng phiên bản MongoDB> 2.0.0, để biết thêm chi tiết xem: http://mongoid.org/en/mongoid/docs/installation.html#installation

+0

Vâng, tôi chỉ cần làm một sudo apt-get install mongodb- 10gen để cài đặt lại mongodb, (tôi nghĩ rằng tôi đã có trước đó isntalled nó từ nguồn khoảng 6 tháng trước) và nó bắt đầu làm việc sau đó. – umar

+0

điều này không hiệu quả với tôi –

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