我有一个 Rails 应用程序,我可以在其中将图像上传到 Amazon S3。这是通过 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 %>
新的图片上传控制器方法
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 %>
或者有没有更好的方法来做到这一点?