2013-07-19 3 views
0

내 컴퓨터에 다운로드 링크를 설정하려는 파일의 경로가 있습니다. 내 모델에서경로에서 파일을 다운로드하는 링크

: 여기에 내가 노력하고있어입니다

class Exam < ActiveRecord::Base 
    attr_accessible :data, :full_path 
    has_attached_file :image, 
     :path => :full_path 
end 

내 컨트롤러는 다음과 같습니다

def download 
    @exam = Exam.find(params[:id]) 
    send_file @exam.image.path, :x_sendfile => true 
end 

그리고 내보기 : 이제

<%= link_to "Download", download_exam_path(@exam) %> 

I 다운로드를 클릭하십시오이 오류가 발생합니다 : can't convert nil into String 나는 사실을 알고 :full_path에 내 파일의 올바른 경로가 포함되어 있습니다. 이 문제를 어떻게 해결할 수 있습니까?

전체 오류 : @exam이보기에 nil처럼

TypeError in ExamsController#download 

can't convert nil into String 

Rails.root: /Users/Ryan45/Programming/rails_projects/oldV_rails_project 
Application Trace | Framework Trace | Full Trace 

app/controllers/exams_controller.rb:83:in `download' 

Request 

Parameters: 

{"id"=>"392"} 

Show session dump 

Show env dump 
Response 

Headers: 

None 
+0

'exams_controller.rb'의'send_file @ exam.image.path, : x_sendfile => true' 라인 83입니까? –

+0

예, 실제로입니다. – DashControl

+0

그냥 '종이 클립'을 사용하고 있습니까? –

답변

1

소리가 난다. 이것은 download 액션 내부까지 인스턴스화되지 않았기 때문에 발생할 수 있습니다. 그러나 아직 빌드되지 않은 액션은 index 또는 show 액션에서 사용하려고합니다.

그럴 경우 다음과 같이 추가해야합니다 (params[:id]이 다른 동작에서 사용 가능한지 확실하지 않습니다. 동작은 download 동작이므로). 컨트롤러에이 오류의 원인 :

@exam = Exam.find(params[:id]) 

업데이트를 전체 오류는 존재로 당신의 코멘트에서 확인하는 exams_controller.rb의 83 줄을 가리키는 것을 보여주는 업데이트를 바탕으로

:

send_file @exam.image.path, :x_sendfile => true 

나는 레일 콘솔 (rails c을)를 열고 입력하십시오

    :

    @exam = Exam.find(params[:id]) 
    

    그때 나는이 두 줄을 시도하여 nil입니다 @exam의 어느 부분을보고 검사를 시작할 것

  1. @exam.image
  2. @exam.image.path

해당 테스트를 기반으로 문제를 파악할 수 있습니다.

+0

내가 따라야할지 확실하지 않습니다. 내 쇼 동작에서 사용하려고한다는 점에서 옳다. 하지만 내 오류 보고서에 따르면 오류는 이미 해당 코드 블록이있는 다운로드 작업에서 발생합니다. 내가 놓친 게 있니? – DashControl

+0

나는 '문자열을 무의미로 변환 할 수 없다'라는 말을 오해 한 것 같습니다. 질문에 대한 전체 오류의 사본을 추가 할 수 있습니까? –

+0

예, 업데이트됩니다. – DashControl

관련 문제