рельсы 3, скрепка (& formtastic) - удаление вложений изображений - PullRequest
5 голосов
/ 15 января 2011

Я не могу найти пример, который завершен во всех компонентах.У меня проблемы с удалением вложений изображений

  1. Классы

      class Product
        has_many :product_images, :dependent => :destroy
        accepts_nested_attributes_for :product_images
      end
    
      class ProductImage
        belongs_to :product
        has_attached_file :image #(etc)
      end
    
  2. Просмотр

      <%= semantic_form_for [:admin, @product], :html => {:multipart => true} do |f| %>
        <%= f.inputs "Images" do %>
          <%= f.semantic_fields_for :product_images do |product_image| %>
            <% unless product_image.object.new_record? %>
              <%= product_image.input :_destroy, :as => :boolean, 
                 :label => image_tag(product_image.object.image.url(:thumb)) %>
            <% else %>
              <%= product_image.input :image, :as => :file, :name => "Add Image" %>
            <% end %>
          <% end %>
        <% end %>
      <% end %>
    
  3. Контроллер

      class Admin::ProductsController < AdminsController
       def edit
         @product = Product.find_by_permalink(params[:id])
         3.times {@product.product_images.build} # added this to create add slots
       end
    
       def update
          @product = Product.find_by_permalink(params[:id])
    
          if @product.update_attributes(params[:product])
            flash[:notice] = "Successfully updated product."
            redirect_to [:admin, @product]
          else
            flash[:error] = @product.errors.full_messages
            render :action => 'edit'
          end
        end
      end
    

Выглядит хорошо, но буквально ничего не происходит, когда я отмечаю флажок.В запросе вижу:

      "product"=>{"manufacturer_id"=>"2", "size"=>"", "cost"=>"5995.0", 
         "product_images_attributes"=>{"0"=>{"id"=>"2", "_destroy"=>"1"}}

Но ничего не обновляется и изображение товара не сохраняется.

Я что-то упустил из-за того, как работает 'accepts_nested_attributes_for'?

1 Ответ

10 голосов
/ 15 января 2011

Из документации API для ActiveRecord :: NestedAttributes :: ClassMethods

: allow_destroy

Если true, уничтожает любые элементы из атрибутовхэш с ключом _destroy и значением, которое оценивается как true (например, 1, '1', true или 'true').Эта опция по умолчанию отключена.

Итак:

accepts_nested_attributes_for :product_images, allow_destroy: true
...