2013-02-26 11 views
5

Ich verwende mongoid mit devise invitable,mongoid as_document Fehler

nach Rollen Benutzer zuweisen ich folgende Fehlermeldung "für Array ** undefined Methode` as_document‘**"

gefunden, irgendwelche Vorschläge?

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 

Was ist los ich mache?

+0

Mit dem gleichen Fehler konfrontiert. Kann mir bitte jemand helfen? –

+1

Sie haben den Code bud eingegeben, der uns nicht mitteilt, welche Zeile den Fehler verursacht. Kannst du den echten Stack-Trace oder weitere Infos posten? – alestanis

Antwort

1

Dies ist wahrscheinlich, weil as_document nicht funktioniert gegen ein Array, nur einzelne Objekte.

+0

Es ist nicht genug Code in Ihrer Frage, um weitere Details oder eine korrigierte Version anzugeben. –

+0

Ich denke, das ist die richtige Antwort. Versuchen Sie "whatever.first.as_document", wo auch immer das Objekt ist, das Sie darstellen möchten. – jschorr

0

Dies ist ein Fehler mit Mongoid und has_many Beziehungen.

Die Methode 'as_document' muss für has_many-Beziehungen definiert werden, wie sie für embeds_many-Beziehungen definiert ist.

ich pull request machen werde dieses Problem behoben zu haben, in der Zwischenzeit Sie mongoid in Ihrem gemfile wie so definieren:

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

, die mit MongoId 5.1.0 mir passiert, wenn in einem Richtung hatte ich "embeds_many", und in der anderen Richtung hatte ich "gehört_to".

Soweit ich weiß, die Rückseite von embeds_many soll embedded_in sein. Ändern der umgekehrten Beziehung zu embedded_in behoben dieses Problem für mich.

Ich muss zugeben, das ist eine sehr obskure Fehlermeldung.