如何删除一个Paperclip附件并一举创建另一个

时间:2012-06-13 07:07:55

标签: ruby-on-rails ruby-on-rails-3 paperclip

我有一个模型“文章”,其中包含“资产”,这是我使用Paperclip附加图像的多态模型。 当我编辑文章时,我希望能够删除旧图像,并在同一笔划中添加新图像。我使用的fields_for似乎足够多,因为the Rails API says我可以将它用于资产的特定实例。所以这是我的表格的相关部分:

形式:

=f.fields_for :assets do |ff|
  =ff.label "image"
  =ff.file_field :image

-unless @article.assets.first.image_file_name.nil?
  -@article.assets.each do |asset|
    =f.fields_for :assets, asset do |fff|
      =image_tag(asset.image.url(:normal))
      =fff.label "delete image"
      =fff.check_box :_destroy

第一个fields_for用于向文章添加图像,第二个部分用于删除已存在的资源。此表单可以添加资产,删除资产,但不能同时执行这两项操作。 这就是问题所在。 我怀疑check_box没有足够的指导或其他东西。

资产模型:

class Asset < ActiveRecord::Base
  belongs_to :imageable, :polymorphic => true

  has_attached_file :image, :styles => { :normal => "100%",:small => "100 x100>",:medium => "200x200>", :thumb => "50x50>" },
                        :storage => :s3, 
                        :s3_credentials => "#{Rails.root}/config/s3.yml", 
                        :path => "/:attachment/:id/:style/:filename"

文章控制器/编辑:

  def edit
    @article = Article.find(params[:id])
    @assets = @article.assets
    if @assets.empty?
      @article.assets.build
    end
  end

我期待看到您的回复。

1 个答案:

答案 0 :(得分:3)

随着我可怜的呼救声被置若罔闻,我被迫独自出发(可能是最好的)。我通过摆弄表格的逻辑来发现解决方案。以下是允许我添加Paperclip附件并在一个表单提交中删除一个(或多个)的设置:

<强>形式:

= form_for(@article, :action => 'update', :html => { :multipart => true}) do |f|
.
.
.
  -@assets.each do |asset|
        =f.fields_for :assets, asset do |asset_fields|
          -if asset_fields.object.image_file_name.nil?
            =asset_fields.label "image"
            =asset_fields.file_field :image
          -else
            =image_tag(asset_fields.object.image.url(:normal))
            =asset_fields.check_box :_destroy

我的设置是:article has_many assets这是一个多态模型,可以保存图片附件。

研究:

http://apidock.com/rails/ActionView/Helpers/FormHelper/fields_for

creating a form for deleting uploads that belongs to products

- 第二个链接:提供了在object提供的表单帮助器上使用fields_for方法的见解,在我的例子中它是asset_fields.object...,这使我可以混淆{{1}的实例1}}

以下是感兴趣的文章控制器方法:

@assets