2013-02-26 8 views
5

Sto usando mongoid con disposizione testamentaria invitable,mongoid as_document errore

dopo l'assegnazione dei ruoli per l'utente che ho trovato il seguente errore

"** metodo non definito` as_document' per Array **", qualche suggerimento?

invitable = find_or_initialize_with_error_by(:email, attributes[:email]) 
invitable.attributes = attributes 
# scope_id attribute does not set properly 
invitable.roles.map {|r| r.scope_id = attributes[:roles_attributes]["0"][:scope_id]} 

if invitable.persisted? && !invitable.invited? 
    invitable.errors.add(:email, :taken) 
elsif invitable.email.present? && invitable.email.match(Devise.email_regexp) 
    invitable.invite! 
end 

Cosa c'è di sbagliato che sto facendo?

+0

Di fronte allo stesso errore. Qualcuno può aiutare, per favore? –

+1

Il bollo del codice pubblicato non ci ha detto quale riga genera l'errore. Puoi pubblicare la traccia dello stack reale o qualche altra informazione? – alestanis

risposta

1

Ciò è probabile perché as_document non funziona contro un array, solo singoli oggetti.

+0

Non c'è abbastanza codice nella tua domanda per fornire ulteriori dettagli o possibili versioni corrette. –

+0

Penso che questa sia la risposta corretta. Prova "what.first.as_document" dove qualunque sia l'oggetto che stai cercando di rappresentare. – jschorr

0

Questo è un bug con Mongoid e ha_molte relazioni.

Il metodo 'as_document' deve essere definito per has_many relazioni, come è definito per embeds_many relazioni.

ho intenzione di fare un pull request di avere questo problema risolto, nel frattempo è possibile definire mongoid nelle Gemfile in questo modo:

gem 'mongoid', :git => https://github.com/mrjlynch.git 
0

che è successo a me con MongoId 5.1.0 quando, in uno direzione che avevo "embeds_many", e nell'altra direzione avevo "appartiene_a".

Da quello che so, il contrario di embeds_many deve essere embedded_in. La modifica della relazione inversa a _internal_in ha risolto il problema per me.

Devo ammettere, questo è un messaggio di errore molto oscuro.