1

Paperclip を使用して画像を添付するポリモーフィック モデルである has_many "Assets" というモデル "Articles" があります。記事を編集しているとき、古い画像を削除し、同じストロークで新しい画像を追加できるようにしたいと考えています。Rails API はAssets の特定のインスタンスに使用できると言っているので、fields_for を使用しています。だからここに私のフォームの関連部分があります:

形:

=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

1 つ目fields_forは記事に画像を追加するためのもので、2 つ目は既存のアセットを削除するためのものです。このフォームは、アセットの追加と削除を行うことができますが、両方を同時に行うことはできません。それが問題です。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

あなたの反応を楽しみにしています。

4

1 に答える 1

3

助けを求める哀れな叫び声に耳が聞こえなくなったので、私は独力で(おそらく最善を尽くして)出発することを余儀なくされました。フォームのロジックをいじることで解決策を発見しました。以下は、1 回のフォーム送信で Paperclip 添付ファイルを追加し、1 つ (または複数) を削除できるようにするセットアップです。

形:

= 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

私のセットアップは次のとおりです。私のために画像の添付ファイルを保持するポリモーフィック モデルであるarticlehas_manyです。assets

リサーチ:

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

製品に属するアップロードを削除するためのフォームを作成する

- 2 番目のリンク: が提供するobjectフォーム ヘルパーでメソッドを使用するための洞察を提供しfields_forました。asset_fields.object...@assets

関心のある記事のコントローラーメソッドは次のとおりです。

  def edit
    @article = Article.find(params[:id])
    @assets = @article.assets
    @article.assets.build
  end
于 2012-06-17T05:33:38.103 に答える