所以我设置我的应用程序将文档上传到S3(跟随Ryan Bates的railscast)。目前,有一个上传文件的表单位于文档资源的索引页面上。成功上传到S3后,该表单将呈现用户可以重命名文件的新操作(因为它在本地命名)。
但我想重构一下,以消除将用户重定向到'/ new'页面。我不想让用户有机会重命名该文件。
必须有一种方法将文件上传到S3,然后将其发布到创建操作。
这就是我的控制器现在的样子。
class DocumentsController < ApplicationController
before_filter :authenticate_user!
def index
@page_title = "Docs"
@documents = household.documents.all
@uploader = Document.new.file_upload
@uploader.success_action_redirect = new_document_url
end
def new
@page_title = "New Doc"
@document = Document.new(household_id: household.id, key: params[:key])
end
def create
@doc = Document.new(params[:document])
if @doc.save
flash[:notice] = "Consider it done!"
redirect_to documents_path
else
flash[:notice] = "Oops. Please try again."
render 'new'
end
end
end
如何简化这种情况并避免渲染/新页面?而不是渲染/ new,我想发布到create动作。我需要修改这一行:
@uploader.success_action_redirect = new_document_url
但我不知道应该是什么。
答案 0 :(得分:1)
也许您可以在DocumentsController
中创建一个充当REST端点的方法。您通过Ajax从客户端发布,然后在端点方法中上传到S3。这样,客户的体验在上传时保持不变。
这样的事情:
def upload
uploader = Document.new(params_from_ajax_post).file_upload
respond_to do |format|
format.html { render :json => {:message => 'Upload successful.'} }
end
end
在routes.rb
:
match 'documents/upload' => 'documents#upload', :via => :post, :as => 'upload'