Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 以尽可能少的步骤上传S3_Ruby On Rails_Amazon S3 - Fatal编程技术网

Ruby on rails 以尽可能少的步骤上传S3

Ruby on rails 以尽可能少的步骤上传S3,ruby-on-rails,amazon-s3,Ruby On Rails,Amazon S3,因此,我设置了我的应用程序,将文档上传到S3(遵循Ryan Bates的railscast)。目前,文档资源的索引页上有一个上传文件的表单。成功上传到S3后,该表单将呈现新的操作,用户可以在其中重命名文件(在本地命名) 但是我想重构它,以避免将用户重定向到“/new”页面。我不想给用户提供重命名文件的机会 必须有一种方法将文件上传到S3,然后将其发布到创建操作 这就是我的控制器现在的样子 class DocumentsController < ApplicationController

因此,我设置了我的应用程序,将文档上传到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

但是我不知道它应该是什么。

也许您可以在
DocumentsController
中创建一个用作REST端点的方法。您可以通过Ajax从客户机发布,然后通过endpoint方法上传到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'

你想做什么?对不起,我不清楚。我编辑了帖子,添加了我只想发布到创建操作,而不是在上传文件后让用户登录/new。基本上,我希望用户在整个时间内都保持在/index上。我更愿意让客户端负责上传。我不同意。你说你想让用户发帖,但保持在同一页上。REST端点解决方案就是这样做的。如果没有重定向,您将使用
@uploader
执行与现在相同的操作。
match 'documents/upload' => 'documents#upload', :via => :post, :as => 'upload'