#ruby-on-rails-3.1 #mongoid #nested-forms
#ruby-on-rails-3.1 #mongoid #вложенные формы
Вопрос:
Я нахожусь на Rails 3.1, Mongoid 2.3.3 и использую драгоценный камень nested_form. В моей форме у меня есть nested_form link_to_add и link_to_remove, настроенные для добавления и удаления встроенного документа в моей модели. Вспомогательный метод link_to_add отлично работает, но изменения справочного метода link_to_remove не сохраняются в MongoDB. В выводе rails я вижу, что параметр JSON, переданный в Mongoid, имеет значение _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
Вот метод обновления контроллера:
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 все еще существует; этот документ также отображается в режиме онлайн (страница извлекает все элементы из встроенного документа).
Я уверен, что что-то пропустил, но я не смог понять, почему встроенный документ не удаляется.
Ответ №1:
да, ваш :allow_destory
должен быть :allow_destroy
Ответ №2:
Я сталкиваюсь с той же проблемой —
РЕШАЕТСЯ с помощью
accepts_nested_attributes_for :phones, :allow_destroy => true