4

Rails 3.1アプリでペーパークリップを使用しています。

アイテムごとに複数の画像を持つことができるように、リレーションシップを使用してアイテムに画像を追加しています。

私がやりたいのは、参照ボタンをクリックして、単一のフィールドだけを使用して複数のファイルを選択できるようにすることです。フィールドごとに一度に 1 つのイメージに移動する必要はありません。

誰かがこれを行う方法を知っていますか、またはフラッシュプラグインを必要としないこれを行うための優れたオプションを持っていますか?

4

3 に答える 3

6

私は 1 つのコントローラーのみを使用しており、関連付けはありません (私のコントローラーは複数の画像をギャラリーにアップロードするためのものです)。あなたの関係で動作するように適応させる必要がありますが、私にとってはうまく機能します(IEでは動作しませんが).機能。

最初のステップは、HTML5 の multiple タグを使用して複数のファイルを受け入れるようにアップロード フィールドを設定することです。

<%= f.file_field :photo, multiple: 'multiple' %>

または、私のように simple_form を使用している場合:

<%= f.input :photo, input_html: { multiple: 'multiple' } %>

次のステップは、コントローラーの作成アクションを変更して、複数のファイルを受け入れて処理することです。これは少し反対する人もいると思いますが、うまくいきます!

def create

  params[:photo][:photo].each do |photo|

    @params = {}
    @params['photo'] = photo

    @photo = Photo.new(@params)

    if !@photo.save
      respond_to do |format|
        format.html { redirect_to new_photo_path, error: 'An error occured uploading.' }
      end
    end
  end

  respond_to do |format|
    format.html { redirect_to photos_path, notice: 'Photos were successfully uploaded.' }
  end
end

見た目よりも単純です。私にとっては、コントローラー名とphotoフィールド名が同じで、params[:photo][:photo]. 基本的に:photoは、リクエストの属性(コントローラーが通常1つのファイルを期待する場所)を取得し、アップロードされたファイルを反復処理して、それぞれに新しい属性を作成し、属性を各ファイルにPhoto設定してから、これを次のように保存しようとします。エラーが発生した場合は新規で警告します。それ以外の場合は、終了すると写真を表示するようにリダイレクトされます。photo@paramsPhoto

私が言うように、これは私にとって非常にうまく機能し、あなたにとっても役立つことを願っています:)

編集これが役に立たなかった場合は、理由を教えていただけますか? 誰かが時間をかけて助けた後、メッセージを無視するだけでは、他の人があなたを助けたいと思うようにはなりません.

于 2012-08-12T09:54:36.690 に答える
3

コントローラを変更せず、次のname:ようにフォームフィールドに属性を追加するだけです。

<%= f.input_field :photo, as: :file, multiple: true, name: 'article[photo]' %>
于 2013-02-22T00:53:07.627 に答える