Rails 3.1アプリでペーパークリップを使用しています。
アイテムごとに複数の画像を持つことができるように、リレーションシップを使用してアイテムに画像を追加しています。
私がやりたいのは、参照ボタンをクリックして、単一のフィールドだけを使用して複数のファイルを選択できるようにすることです。フィールドごとに一度に 1 つのイメージに移動する必要はありません。
誰かがこれを行う方法を知っていますか、またはフラッシュプラグインを必要としないこれを行うための優れたオプションを持っていますか?
Rails 3.1アプリでペーパークリップを使用しています。
アイテムごとに複数の画像を持つことができるように、リレーションシップを使用してアイテムに画像を追加しています。
私がやりたいのは、参照ボタンをクリックして、単一のフィールドだけを使用して複数のファイルを選択できるようにすることです。フィールドごとに一度に 1 つのイメージに移動する必要はありません。
誰かがこれを行う方法を知っていますか、またはフラッシュプラグインを必要としないこれを行うための優れたオプションを持っていますか?
私は 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
@params
Photo
私が言うように、これは私にとって非常にうまく機能し、あなたにとっても役立つことを願っています:)
編集これが役に立たなかった場合は、理由を教えていただけますか? 誰かが時間をかけて助けた後、メッセージを無視するだけでは、他の人があなたを助けたいと思うようにはなりません.
コントローラを変更せず、次のname:
ようにフォームフィールドに属性を追加するだけです。
<%= f.input_field :photo, as: :file, multiple: true, name: 'article[photo]' %>