Mongoid _destroy не удаляет встроенный документ с помощью драгоценного камня nested_form

#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