2010-11-13 4 views
0

Я использую Mongoid on Rails 3 и пытаюсь создать вложенную форму. Проблема я бегу в это, когда я использовал accept_nested_attributes_for метод, я получаю сообщение об ошибке:Ошибка с вложенными формами с Mongoid

undefined method `persisted?' for []:Array 

ли кто-либо другой, имеющий проблемы с вложенными формами в Mongoid? Что я могу сделать, чтобы исправить это?

Редактировать: подробнее об ошибке. Это полный след.

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 полностью поддерживает ActiveModel, поэтому проблемы там нет. Немного сложно реализовать вложенные формы даже с помощью ActiveRecord. Можете ли вы опубликовать код, который вы используете для моделей и форм? Трудно предложить решение, не видя точно, как вы реализуете связь и форму. – bowsersenior

ответ

0

Rails 3 следует за ActiveModel, который должен соответствовать определенному контракту, как и ожидалось ActionPack (и ActionView).

См. this post ,, в котором Иегуда Кац подробно объясняет это в разделе ActiveModel. Также см. ActiveModel ChangeLog, в котором содержится ссылка на метод.

Проще говоря, ваша модель должна реализовать определенные методы, чтобы хорошо играть с остальными рельсами 3 приложения. И этот метод является одним из них.

ActiveRecord 3 просто следует этому контракту. Если вы выбрасываете его и используете свой собственный ORM, как Mongoid, если рамка не делает этого (например, mongoid case), вы должны сделать это явно. couch_potato, который похож на оболочку для couchdb, делает то же самое.

Смежные вопросы