使用nested_form gem不会删除Mongoid _destroy嵌入文档

时间:2011-11-02 21:13:11

标签: ruby-on-rails-3.1 mongoid nested-forms

我在Rails 3.1,Mongoid 2.3.3上,并使用了nested_form gem。在我的表单中,我设置了nested_form link_to_add和link_to_remove来添加和删除模型中的嵌入文档。 link_to_add帮助器方法很有效,但是在MongoDB中不会保留link_to_remove帮助方法更改。在rails输出中,我可以看到传递给Mongoid的JSON参数设置了_destroy:1,但更改未保存到MongoDB。

以下是模型:

class MenuItem
  include Mongoid::Document
  include Mongoid::Timestamps

  field :name
  attr_accessible :name

  embeds_many :ingredient_infos
  accepts_nested_attributes_for :ingredient_infos, :allow_destory => true
  attr_accessible :ingredient_infos_attributes

end

这是Controller的更新方法:

  def update
    @menu_item = MenuItem.find(params[:id])

    respond_to do |format|
      if @menu_item.update_attributes(params[:menu_item])
        format.html { redirect_to @menu_item, notice: 'Menu item was successfully updated.' }
        format.json { head :ok }
      else
        format.html { render action: "edit" }
        format.json { render json: @menu_item.errors, status: :unprocessable_entity }
      end
    end
  end

以下是发送到控制器的参数:

{
    "utf8"=>"✓",
     "authenticity_token"=>"5abAWfFCr7hkzYXBEss75qlq8DMQ0pW5ltGmrgHwPjQ=",
     "menu_item"=>
    {
        "name"=>"Bowl",
        "ingredient_infos_attributes"=>
        {
            "0"=>
            {
                "ingredient"=>"Rice",
                 "_destroy"=>"false",
                 "id"=>"4eb1b0b118d72f1a26000022"
            },
             "1"=>
            {
                "ingredient"=>"Chicken",
                 "_destroy"=>"1",
                 "id"=>"4eb1b0b118d72f1a26000025"
            }
        }
    },
     "commit"=>"Update Menu item",
     "id"=>"4eb1b0b118d72f1a2600001f"
}

在MongoDB中,Chicken文档仍然存在;该文档也在在线视图中显示(该页面提取嵌入文档中的所有项目)。

我确定我错过了一些东西,但我无法弄清楚为什么嵌入式文档没有删除。

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题 -

解决

accepts_nested_attributes_for :phones, :allow_destroy => true

答案 1 :(得分:1)

是的,您的:allow_destory应为:allow_destroy