Amazon S3 に画像をアップロードできる Rails アプリがあります。これは、画像に関する特定の属性 (関連付けられているプロジェクトなど) を保存するための多くの非表示の値を持つフォームを介して、Carrierwave を介して行われます。
現在の画像アップロードフォーム
<%= semantic_form_for Image.new do |image_form| %>
<%= image_form.input :project_id, :as => :hidden, :label => false, :input_html => {:value => @project.id} %>
<% if @step.new_record? %>
<%= image_form.input :step_id, :as => :hidden, :label => false, :input_html => {:value => -1} %>
<%= image_form.input :saved, :as => :hidden, :label => false, :input_html => {:value => false} %>
<% else %>
<%= image_form.input :step_id, :as => :hidden, :label => false, :input_html => {:value => @step.id} %>
<%= image_form.input :saved, :as => :hidden, :label => false, :input_html => {:value => true} %>
<% end %>
画像のアップロードをバックグラウンド タスクに移動することを検討しています。Carrierwave-directを使用する場合、画像を独自の direct_upload_form で送信する必要があることを理解しています。これは、現在持っている非表示の値を渡すことができません。また、画像が Amazon S3 に正常に送信されたら、 success_action_redirectメソッドを呼び出して URL にリダイレクトできることも知っています。
新しい画像アップロード フォーム
<%= direct_upload_form_for @uploader do |f| %>
<p><%= f.file_field :image_path %></p>
<p><%= f.submit "Upload Image" %></p>
<% end %>
画像アップロード用の新しい Controller メソッド
def index
@uploader = Image.new.image_path
@uploader.success_action_redirect = update_image_attributes_url
end
私がやりたいのは、元のフォームにあったさまざまな非表示の値をすべて使用して画像を自動的に保存することです (フォームに手動で入力して [送信] をクリックする必要があるページにリダイレクトする必要はありません)。
私がこれを行うことを考えている方法は、特定の画像レコードを編集するためのフォームを含むビューにリダイレクトし、ページが読み込まれたときに送信ボタンを自動的にトリガーすることです。しかし、ユーザーがこのページにリダイレクトされたときに空白のページが表示されるのは望ましくありません。
画像が Amazon S3 にアップロードされた後、success_action_redirect で AJAX をトリガーするにはどうすればよいですか? このようなものは機能しますか?
<%= direct_upload_form_for @uploader, :remote=> true do |f| %>
<p><%= f.file_field :image_path %></p>
<p><%= f.submit "Upload Image" %></p>
<% end %>
または、これを一般的に行うより良い方法はありますか?