2014-09-08 2 views
0

레일 애플리케이션에서 파일을 다운로드하는 데 문제가 있습니다. 누군가 내가 놓친 것과 잘못한 것에 대해 어느 정도 통찰력을 줄 수 있다면 크게 감사하겠습니다. 또한, 나는 send_datasend_file에 대해 읽고있다. 나는 send_data에 대해 DATA를 보내달라고 요청할 때 어떤 의미인지 이해하지 못하고, send_file에 대해서는 PATH입니다. 차이점이 뭐야? 다시 한 번 감사드립니다!레일 애플리케이션에서 파일을 다운로드하려고 시도합니다.

routes.rb

resources :companies do 
    member do 
     get 'send_document' 
    end 
    end 

뷰 코드 (static_pages_controller에서,하지 companies_controller)

 <ul> 
    <% @companies.each do |company| %> 
     <li> 
      <%= company.compName %> 
      <%= company.formType %> 
      <%= company.fileLocation %> 
      <%= link_to "View Document", controller: :companies,    send_document_path(company), , method: :get %> 
     </li> 
    <% end %> 
</ul> 

companies_controller.rb

def send_document 
@company = Company.find(params[:id]) 
send_file "#{@company.fileLocation}" 
end 

오류 : 나는 link_to 행에 오류가 발생했습니다. 데이터베이스에 특정 회사의 파일을 다운로드하는 데 문제가 있습니다. 어떤 도움을 주셔서 감사합니다. 감사! 또한 companies_controller에서 company.find (params [: id]) 코드는 회사 ID가 없다고 말합니다.

업데이트 : 나는

<%= link_to "View Document", send_document_path(company), {controller: :companies}, method: :get %> 

으로 코드를 변경하고 지금이 오류 받고 있어요 : 어떤 도움을 주시면 감사하겠습니다

app/views/layouts/_search_bar.html.erb where line #6 raised: 

undefined method `send_document_path' for #<#<Class:0x00000005446998>:0x00000004147360> 

Extracted source (around line #6): 

3 
4 
5 
6<%= link_to "View Document", send_document_path(company), {controller: :companies}, method: :get %> 
7 
8 
9 

을! 감사!

+0

해야한다 ?? –

+0

안녕하세요! Gagan! 답장을 보내 주셔서 감사합니다. 내가 찾은 새로운 오류로 내 게시물을 업데이 트했습니다 –

답변

0

하나, 당신이있어 경로해야 당신의 링크가 없으므로 컨트롤러를 지정할 필요가 없습니다.

<%= link_to "View Document", send_document_path(company), {controller: :companies}, method: :get %> 

오류를 게시 할 수 있습니다

<%= link_to "View Document", send_document_company_path(company), method: :get %> 
+0

감사합니다. 그것은 트릭을했다. 작성해야 할 경로를 알 수있는 문서를 어디서 찾을 수 있는지 알고 있습니까? send_document_comp_path가 아니라 send_document_company_path라는 것을 어떻게 알았습니까? 다시 한 번 감사드립니다! –

+0

콘솔에서 'rake routes'를 실행하여 모든 경로를 확인하십시오. 각 경로의 경로는 첫 번째 (왼쪽) 열에 표시됩니다. 경로 파일 설정을 구성원에게 작업을 연결하는 광산 중 하나와 비교 한 후 경로가 올바르지 않다는 것을 알았고 내 경로가 귀하의 것과는 달리 해당 작업의 경로에 연결된 모델 이름을 가지고 있음을 알았습니다. – digijim

+0

질문의 두 번째 부분까지는 [이 게시물]과 유사합니다 (http://stackoverflow.com/questions/5535981/difference-between-rails-send-data-and-send-file-with-example). BTW, @DariusTran 이것이 당신의 문제에 대한 해결책으로 밝혀지면, 당신이 그것을 대답 한 것으로 표시하는 것이 좋을 것입니다. :) – digijim

0

SEND_DATA (데이터 옵션 = {})

브라우저에 주어진 이진 데이터를 보낸다. 이 메소드는 render plain : data와 유사하지만 브라우저가 응답을 파일 첨부 (즉 다운로드 대화 상자)로 표시할지 아니면 인라인 데이터로 표시할지 여부를 지정할 수도 있습니다. 내용 유형, 명백한 파일 이름 및 기타 사항을 설정할 수도 있습니다.


send_file (경로 옵션 = {})

파일을 전송. 이것은 Rack :: Sendfile 미들웨어를 통해 서버에 적합한 방법 (예 : X-Sendfile)을 사용합니다. 사용할 헤더는 config.action_dispatch.x_sendfile_header를 통해 설정됩니다. 서버는 X-Sendfile-Type 헤더를 설정하여 이것을 설정할 수도 있습니다.

More Info

이 편집 : 코드에서 구문 오류가 발견

: send_document_path(company) 후 위의 줄에

<%= link_to "View Document", controller: :companies,    send_document_path(company), , method: :get %> 

쉼표 두 번가 (,)가 수도가 오류 ..

업데이트 :

<%= link_to "View Document", :url => { :controller => "companies", :action => "send_document(company)" } ,:method => :get %> 
0
<%= link_to "View Document", controller: :companies, send_document_path(company), , method: :get %> 

그것은 잘못 지정하지 ,, 단지 당신의 루트 파일에 따르면 ,

<%= link_to "View Document", controller: :companies, send_document_path(company), method: :get %> 
+0

죄송합니다, 그 stackoverflow에 코드를 퍼팅 때 내 부분에 그냥 실수했습니다.()이 구문 오류를 일으키는 것 같습니다. 그래도 고마워! –

+0

게시물에 전체 오류를 게시하십시오. –

+0

예기치 않은 ',', 예상 => ..., send_document_path (회사), 메소드 : : get); @ output_buffe ... ...^ –

관련 문제