2012-10-04 43 views
0

我有以下型号:删除从父内嵌构件mongoid

class User 
    include Mongoid::Document 
    embeds_many :user_missions 
    attr_accessible :user_missions_attributes 
    accepts_nested_attributes_for :user_missions, :allow_destroy => true 
end 

class UserMission 
    include Mongoid::Document 

    embedded_in :user, :inverse_of => :user_missions 

    belongs_to :mission, :inverse_of => nil 
    validates_presence_of :mission, :inverse_of => nil 

    attr_accessible :mission_title 

    def mission_title 
    mission.try(:title) 
    end 

    def mission_title=(title) 
    self.mission = Mission.find_or_create_by(:title => title) if title.present? 
    end 
end 

class Mission 
    include Mongoid::Document 

    attr_accessible :title 
    field :title, type: String 
    validates_presence_of :title 
end 

的问题是我无法从用户删除user_mission。

我在我看来失败了(基本上逐字从railscasts):

jQuery -> 
    $('form').on 'click', '.remove_fields', (event) -> 
    $(this).prev('input[type=hidden]').val('1') 
    $(this).closest('fieldset').hide() 
    event.preventDefault() 

<fieldset> 
    <%= f.object.mission.title %> 
    <%= f.hidden_field :_destroy %> 
    <%= link_to "remove", '#', class: "remove_fields" %> 
</fieldset> 

,我似乎有以下规格

it "should delete using nested attributes" do 
    user = User.create(:username => "username", :email => "[email protected]", :password => "password", :password_confirmation => "password") 
    user.attributes = { 
    user_missions_attributes: { 
     "0" => { mission_title: "Mission A" } } } 
    user.save! 
    saved_user = User.first 
    saved_user.user_missions.size.should == 1 

    saved_user.attributes = { 
    user_missions_attributes: { 
     "0" => { :_destroy => '1' } } } 
    saved_user.save! 
    emptiedUser = User.first 
    debugger 

    emptiedUser.user_missions.size.should == 0 
end 

它未能就上线发现问题1 UserMission。

我正在使用Mongoid 3.0.6和Rails 3.2.8。任何帮助,将不胜感激。

回答

0

销毁时需要包含id_id。 “0”在user_missions_attributes中只有一个键。在散列内部,“0”键需要您实际想要删除的文档的ID。所以像这样:

"0" => { :_id => ..., :_destroy => '1' }