Mongoid _destroy не удаляет встроенный документ, используя гем nested_form - PullRequest
2 голосов
/ 03 ноября 2011

Я на 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 все еще существует;этот документ также отображается в интерактивном представлении (страница извлекает все элементы во встроенном документе).

Я уверен, что что-то пропустил, но мне не удалось выяснить, почему встроенный документне удаляется.

Ответы [ 2 ]

1 голос
/ 22 февраля 2012

да, ваш :allow_destory должен быть :allow_destroy

1 голос
/ 05 ноября 2011

У меня возникла та же проблема -

РАЗРЕШЕНО с

accepts_nested_attributes_for :phones, :allow_destroy => true
...