2011-05-24 3 views
3

J'ai donc une application simple comme dans RailsCast about nested forms. et un problème est que lorsque je soumets le formulaire (avec enquête et questions) les questions ne sont pas enregistrées.problème d'attributs imbriqués dans les rails 3 avec mongoid (objets imbriqués ne sont pas sauvegardés)

Mes modèles (enquête, qui a beaucoup de questions):

class Survey 
    include Mongoid::Document 
    field :name 
    has_many :questions, :dependent => :destroy 
    accepts_nested_attributes_for :questions, :allow_destroy => true 
end 

class Question 
    include Mongoid::Document 
    field :content 
    belongs_to :survey 
end 

et Survey Controller:

def new 
    @survey = Survey.new 
    3.times {@survey.questions.build} 
.... 

et une vue:

<%= form_for(@survey) do |f| %> 
    <%= f.fields_for :questions do |builder| %> 
    <%= builder.label :content, "Question" %><br /> 
    <%= builder.text_area :content, :rows => 3 %><br /> 
    <%= builder.check_box :_destroy %> 
    <%= builder.label :_destroy, "Remove Question" %> 
    <% end %> 
... 

Dans mon journal, j'ai:

Started POST "/surveys" for 127.0.0.1 at 2011-05-24 13:26:51 +0400 
    Processing by SurveysController#create as HTML 
    Parameters: {"utf8"=>"G£ô", "authenticity_token"=>"tX0FfMiLbh1BwjuY4CuvAKt2UpTraY3vmdo58ocBnos=", "survey"=>{"name"=>" 
Rails", "questions_attributes"=>{"0"=>{"content"=>"Are you fond of Rails?", "_destroy"=>"0"}, "1"=>{"content"=>"Rails is 
the best, ha?", "_destroy"=>"0"}, "2"=>{"content"=>"How many railscasts have you watched?", "_destroy"=>"0"}}}, "commit 
"=>"Create Survey"} 
MONGODB nested_attributes_development['surveys'].insert([{"name"=>"Rails", "_id"=>BSON::ObjectId('4ddb79dba5372914380000 
69')}]) 
Redirected to http://localhost:3000/surveys/4ddb79dba537291438000069 

Répondre

7

La réponse a été trouvée dans les groupes Google, donc je dupliquer simplement:

MONGODB 
nested_attributes_development['surveys'].insert([{"name"=>"Rails", 
"_id"=>BSON::ObjectId('4ddb79dba5372914380000 
69')}]) 

Cela ne sauvons pas à la question des collections qui ne sont pas faites avec MongoId en défaut. Il suffit d'ajouter has_many: questions,: dependent =>: destroy, : autosave => true Cela devrait fonctionner.

cf. http://mongoid.org/docs/upgrading.html pour plus de détails.

Questions connexes