2013-12-14 2 views
0

그래서 내 앱이 Ryan Bates의 railscast를 따라 S3에 문서를 업로드하도록 설정했습니다. 현재 파일을 업로드 할 수있는 양식이 문서 자원의 색인 페이지에 있습니다. S3에 성공적으로 업로드되면 해당 양식은 사용자가 파일 이름을 변경할 수있는 새 작업을 렌더링합니다 (이름이 로컬 인 경우).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를 렌더링하는 대신 작성 작업에 게시하고 싶습니다. 이 줄을 수정해야합니다 :

@uploader.success_action_redirect = new_document_url 

그러나 나는 그것이 무엇이어야하는지 모른다.

+0

당신은 무엇을 대신하기를 원하십니까? – Vidya

+0

미안하지만 나는 그것에 대해 명확하지 않았습니다. 게시물을 편집하여 파일을 업로드 한 후 /에 새 사용자를 착신시키는 대신 작업 만들기에 게시하기를 원합니다. 기본적으로 사용자가 전체/인덱스에 머물러 있기를 바랍니다. –

답변

1

아마 에 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' 
+0

클라이언트가 업로드를 처리하도록하는 것이 좋습니다. –

+0

나는 따라 가지 않는다. 사용자가 게시하지만 같은 페이지에 머물고 싶다고 말했습니까? REST 엔드 포인트 솔루션이 바로 그 기능을 수행합니다. 리디렉션없이'@ uploader'를 사용하여 똑같은 일을 할 수 있습니다. – Vidya

관련 문제