2011-05-24 133 views
3

所以我有一个简单的应用程序,如RailsCast about nested forms.和一个问题是,当我提交表格(与调查和问题)问题不保存与mongoid的轨道3嵌套属性问题(嵌套的对象不保存)

我的模型(调查中,有许多问题):

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 

和测量控制器:

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

和视图:

<%= 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 %> 
... 

在我的日志,我有:

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 

回答

7

答案在谷歌群被发现,所以我只是复制它:

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

这不保存质疑这是不符合默认 mongoid做收藏。 只需添加has_many:questions,:dependent =>:destroy,:autosave => true 这应该有效。

cf. http://mongoid.org/docs/upgrading.html了解更多详情。