我在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文档仍然存在;该文档也在在线视图中显示(该页面提取嵌入文档中的所有项目)。
我确定我错过了一些东西,但我无法弄清楚为什么嵌入式文档没有删除。
答案 0 :(得分:1)
我遇到了同样的问题 -
解决
accepts_nested_attributes_for :phones, :allow_destroy => true
答案 1 :(得分:1)
是的,您的:allow_destory
应为:allow_destroy