2013-03-15 12 views
10

Ich habe hier ein paar Einträge bezüglich File.exists gefunden? in einer Rails-App, aber versuchen, die Lösungen haben nicht geholfen, ich bin ziemlich neu, also muss ich etwas Dummes tun.Rails Datei.exist? gibt false zurück, wenn die Datei vorhanden ist

Ich verwende:

  • Rails 3.2.11
  • Rubin 1.9.3
  • Paperclip für die Datei unter
  • ActiveAdmin erwähnt die Datei unter
  • Arbeiten im genannten hochladen Entwicklungsumgebung
  • Nicht vorkompilierte Assets

ich ein Modell „Stil“ haben und es hat eine Bildanlage, kann ich das Bild mit

<%= image_tag(@style.style_image) %> 

und es funktioniert gut machen.

Kurz gesagt, ich möchte überprüfen, ob die Datei Bild tatsächlich in dem Ordner ist, in dem es sein sollte - ich möchte nicht verwenden @ style.style_image.present? zum Überprüfen von Bildern, weil nur der Datenbankdatensatz überprüft wird. Ich möchte File.exist verwenden?, um zu sehen, ob es tatsächlich eine Datei für @ style.style_image gibt.

Also meiner Ansicht Datei, habe ich den Code

<% if File.exist?(@style.style_image.url) %> 
The image exists. 
<% else %> 
The image is not here. 
<% end %> 

Und es druckt immer „das Bild ist nicht hier“, wenn ich die Seite zu laden. Direkt unten zeige ich mein Bild mit image_tag an, also weiß ich, dass das Bild da ist.

Ich habe auch versucht,

<% if File.exist?(Rails.root + @style.style_image.url) %> 

ohne Glück. Ich habe auch versucht, FileTest.exist?, FileTest.exists ?, und File.exists? aber keiner wird mir sagen, wenn das Bild wirklich da ist.

Gibt es etwas, das mir fehlt? Jede Anleitung würde sehr geschätzt werden. Ich bin nur ein paar Monate in Ruby and Rails, also vermisse ich wahrscheinlich etwas Dummes.

+3

Sie müssen einen Pfad zu 'File.exist?' Nicht eine URL übergeben. – silasjmatson

+0

Ich bin mir nicht sicher, warum Sie für diese Frage keine höhere Bewertung haben. Gut gefragt. +1. – sscirrus

Antwort

9

Ich denke, Sie wollen @style.style_image.path anstelle von .url.

Drucken Sie es aus, um sicher zu sein.

+1

Ihr beiden habt recht, danke! Auch habe ich einen Fehler gemacht, style_image ist ein anderes Modell, und style_image.image ist das eigentliche Bild. Die Lösung, die funktioniert hat, ist '<% ​​if File.exist? (@ Style.style_image.image.path)%>' –

+1

@TomNetzband Sicher, ich könnte dir helfen. Markieren Sie die Antwort als richtig, um anderen zu helfen, die auf dasselbe Problem stoßen könnten. –

5

Jedes Mal, wenn Sie sich mit Web-URLs und Dateien auf der Festplatte beschäftigen, müssen Sie vorsichtig sein, welchen "Pfad" Sie verwenden, und Sie müssen immer genau wissen, ob Sie Ihren Code dem Speicherort der Datei oder einem Browser mitteilen wie man dieselbe Datei anfordert.

Der Webserver versteckt die Dateistruktur des Betriebssystems aus dem Benutzer/Browser aus vielen Gründen, wobei die Sicherheit sehr hoch ist. Zum Beispiel sind URLs relativ zum Server, nicht zum Stamm des Laufwerks.

In was Sie hineingeraten ist sehr üblich und die Chancen sind wirklich gut, dass jeder, der mit der Programmierung für das Web arbeitet, wahrscheinlich mehrmals auf dieselbe Sache stoßen wird oder wird.

Verwandte Themen