2010-11-13 29 views
0

J'utilise Mongoid sur Rails 3 et essaye de construire un formulaire imbriqué. Le problème que je cours en est quand je accept_nested_attributes_for méthode, je reçois ce message d'erreur:Avoir une erreur avec des formes imbriquées avec Mongoid

undefined method `persisted?' for []:Array 

Quelqu'un est-il d'avoir d'autre problème avec des formes imbriquées dans MongoId? Que puis-je faire pour le réparer?

Editer: plus sur l'erreur. C'est la trace complète.

mongoid (2.0.0.beta.19) lib/mongoid/criteria.rb:156:in `send' 
mongoid (2.0.0.beta.19) lib/mongoid/criteria.rb:156:in `method_missing' 
mongoid (2.0.0.beta.19) lib/mongoid/associations/references_many.rb:113:in `send' 
mongoid (2.0.0.beta.19) lib/mongoid/associations/references_many.rb:113:in `method_missing' 
actionpack (3.0.1) lib/action_view/helpers/form_helper.rb:1280:in `fields_for_nested_model' 
actionpack (3.0.1) lib/action_view/helpers/form_helper.rb:1273:in `fields_for_with_nested_attributes' 
actionpack (3.0.1) lib/action_view/helpers/form_helper.rb:1155:in `fields_for' 
simple_form (1.2.2) lib/simple_form/action_view_extensions/builder.rb:96:in `simple_fields_for' 
app/views/users/profile.html.haml:16:in `_app_views_users_profile_html_haml__599717908_2187897020_0' 
+0

Mongoid prend entièrement en charge ActiveModel donc le problème n'est pas là. Il est un peu compliqué d'implémenter des formulaires imbriqués même avec ActiveRecord. Pouvez-vous poster le code que vous utilisez pour les modèles et le formulaire? Il est difficile de proposer une solution sans voir exactement comment vous implémentez l'association et la forme. – bowsersenior

Répondre

0

Rails 3 suit ActiveModel qui a certains contrats à suivre comme prévu par ActionPack (et ActionView). Référez-vous à this post, dans lequel Yehuda Katz explique cela en détail dans la section ActiveModel. Voir également ActiveModel ChangeLog, qui fait référence à la méthode. Tout simplement, votre modèle doit mettre en œuvre certaines méthodes pour jouer bien avec le reste de l'application 3 rails. Et cette méthode est l'un d'entre eux. ActiveRecord 3 ne fait que suivre ce contrat.

Si vous le jetez et utilisez votre propre ORM comme Mongoid, à moins que le framework ne le fasse (comme le cas mongoïde), vous devez le faire explicitement. couch_potato qui est un emballage similaire pour couchdb fait exactement la même chose.