2013-07-19 6 views
0

J'ai un chemin pour un fichier sur ma machine pour lequel je voudrais définir le lien de téléchargement. Voici ce que je suis en train:lien pour télécharger le fichier à partir du chemin

Dans mon modèle:

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

mon contrôleur ressemble à ceci:

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

Et moi:

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

Maintenant, quand je Cliquez sur télécharger Je reçois cette erreur: can't convert nil into String Je sais pour un fait que :full_path contient le chemin d'accès correct à mon fichier. Comment puis-je réparer cela?

pleine erreur:

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

Est-ce que 'send_file @ exam.image.path,: x_sendfile => true' ligne 83 de' exams_controller.rb'? –

+0

Oui, c'est en effet. – DashControl

+0

il suffit de demander, utilisez-vous 'paperclip'? –

Répondre

1

On dirait que @exam est nil dans votre vue. C'est peut-être parce qu'il n'est pas instancié jusqu'à l'intérieur de l'action download - mais vous essayez de l'utiliser dans l'action index ou show, où il n'a pas encore été construit. Si c'est le cas, alors vous aurez juste besoin d'ajouter ceci (ou quelque chose comme ça - je ne suis pas sûr que params[:id] sera disponible dans l'autre action, comme dans l'action download) à l'action dans votre contrôleur qui cause l'erreur:

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

Mise à jour

sur la base de la mise à jour montrant que l'erreur complète pointe à la ligne 83 de exams_controller.rb qui vous avez confirmé votre commentaire comme étant:

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

j'ouvrir la console Rails (rails c) et entrez:

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

alors je commencer à vérifier pour voir quelle partie de @exam est nil en essayant ces deux lignes:

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

Vous pourriez être en mesure de comprendre le problème en fonction de ce test.

+0

Je ne sais pas si je suis. Vous avez raison de dire que j'essaie de l'utiliser dans mon show show. Mais selon mon rapport d'erreur, l'erreur provient de mon action de téléchargement, qui a déjà ce bloc de code. Est-ce que je manque quelque chose? – DashControl

+0

Je pense que j'ai mal compris où le 'ne peut pas convertir nil en String' était originaire. Pouvez-vous ajouter une copie de l'erreur complète que vous obtenez dans votre question? –

+0

Oui, il est mis à jour. – DashControl

Questions connexes