2013-03-15 15 views
10

Ho trovato alcuni post qui riguardo File.exists? in un'app Rails ma provare le soluzioni non mi ha aiutato, sono abbastanza nuovo quindi devo fare qualcosa di stupido.Rails File.exist? produce false quando è presente il file

sto usando:

  • Rails 3.2.11
  • Rubino 1.9.3
  • Paperclip per il file indicato di seguito
  • ActiveAdmin per caricare il file indicato di seguito
  • Lavorare in ambiente di sviluppo
  • Attività non precompilate

ho un modello di "stile" e ha un immagine allegata, mi può rendere l'immagine con

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

e funziona bene.

In breve, voglio controllare se l'immagine del file è effettivamente lì nella cartella in cui dovrebbe essere - Non voglio usare @ style.style_image.present? per il controllo delle immagini perché questo controlla solo il record db. Voglio usare File.exist? per vedere se esiste effettivamente un file per @ style.style_image.

Così nel mio file di vista, ho il codice

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

Ed è sempre stampe "l'immagine non è qui" quando carico della pagina. Subito sotto sto visualizzando la mia immagine usando image_tag, quindi so per certo che l'immagine è lì.

Ho anche provato

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

senza fortuna. Ho anche provato a utilizzare FileTest.exist ?, FileTest.exists? E File.exists? ma nessuno mi dirà la verità quando l'immagine è definitivamente lì.

C'è qualcosa che mi manca? Qualsiasi guida sarebbe molto apprezzata. Sono solo pochi mesi in Ruby e Rails quindi probabilmente mi manca qualcosa di stupido.

+3

È necessario passare un percorso a 'File.exist?' Non un URL. – silasjmatson

+0

Non sono sicuro del motivo per cui non hai una valutazione più alta per questa domanda. Bene chiesto +1. – sscirrus

risposta

9

Penso che tu voglia @style.style_image.path invece di .url.

Stampalo per essere sicuro.

+1

Avevate ragione, grazie! Inoltre ho fatto un errore, style_image è un altro modello, e style_image.image è l'immagine reale. Quindi la soluzione che ha funzionato è '<% if File.exist? (@ Style.style_image.image.path)%>' –

+1

@TomNetzband Certo, sono felice di poterti aiutare. Segna la risposta come corretta per aiutare chiunque possa incontrare lo stesso problema. –

5

Ogni volta che si ha a che fare con URL e file web su disco, bisogna stare attenti a quale "percorso" si sta utilizzando e tenerlo bene se si sta dicendo al proprio codice dove trovare il file o un browser come richiedere lo stesso file.

Il server Web nasconde la struttura dei file del sistema operativo dall'utente/browser per molti motivi, poiché la sicurezza è molto elevata. Ad esempio, gli URL sono relativi al server, non alla radice dell'unità.

Quello che hai incontrato è molto comune e le probabilità sono davvero buone che chiunque lavori con la programmazione per il web abbia, o lo farà, la stessa cosa, probabilmente più volte.

Problemi correlati