我有一个模型“文章”,其中包含“资产”,这是我使用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
我期待看到您的回复。
答案 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