2012-06-19 13 views
5

Ho il seguente codice nel modello di società rotaie: modellocome far funzionare la relazione has_and_belongs_to_many in mongoid

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

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

utente:

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

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

C'è una casa discografica nel database, ed un record utente e sono associati. Per qualche ragione, il seguente codice non funziona:

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

Allo stesso modo, il codice followign non funziona:

u = User.first 
u.companies 

Ma il seguente codice funziona:

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

e la funziona anche il seguente codice:

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

quindi se provo ad accedere agli utenti da company.users, non funziona, ma l'array user_ids ha un elenco di ID utente, e quando provo ad accedere agli utenti da questo elenco, funziona. Come posso risolvere questo problema?

sto usando rotaie 3.2.5 e mongoid 3.0.0.rc

+0

Ho notato che durante la creazione dell'associazione da 'user.companies << company', ho ottenuto' user.companies' come previsto ma 'company.users' ha funzionato in modo diverso, restituendo una query. Potevo vedere quell'array chiamando 'company.users.all.to_a'. A seguito di ciò ho chiamato "company.users << user2' questo sembrava davvero fare casino con le associazioni. – Baruch

+0

Molto tardi allo spettacolo. Questa soluzione alternativa lo ha fatto per me: http://stackoverflow.com/questions/7308539/mongoid-has-and-belongs-to-many-associations/36282420#36282420 –

risposta

2

Ho avuto esattamente lo stesso problema;) assicurarsi che si sta usando MongoDB versione> 2.0.0, per maggiori dettagli si veda: http://mongoid.org/en/mongoid/docs/installation.html#installation

+0

Sì, ho semplicemente fatto un sudo apt-get install mongodb- 10gen per reinstallare mongodb, (penso di averlo prima non lo ha richiamato dalla fonte circa 6 mesi fa) e ha iniziato a funzionare dopo. – umar

+0

questo non funziona per me –

Problemi correlati