2012-06-26 4 views
5

In meiner Show Ansichten, wann immer ich versuche, ein Bild mit dem image_tag Builder Schienen nicht nach Bildern im Öffentlichen Ordner innerhalb meiner Show-Ansichten anzeigen .. .Schienen 3 nicht in öffentlichen Ordner für Assets auf Show-Methode

zum Beispiel:

<%= image_tag "thumbnails/fish.jpg" %> 

diese produzieren:

ActionController::RoutingError (No route matches [GET] "/uploads/thumbnails/fish.jpg"): 

die Büroklammer Gem für mein Upload-Modell und ich bin Speichern Uploads t ich verwende oa andere Ordner als der öffentliche Ordner aus Sicherheitsgründen, und ja, diese Show Ansicht innerhalb des Upload-Controller auftritt ...

In meinem Hochladen Modell verwende ich diese Zeile Uploads speichern zu einem nicht öffentlichen Ordnern:

has_attached_file :upload, :path => ":rails_root/:class/:id/:basename.:extension", 
          :url => ":rails_root/:class /:id/:basename.:extension" 

Rake Routen:

upload GET /uploads/:id(.:format)                 {:action=>"show", :controller=>"uploads"} 
     PUT /uploads/:id(.:format)                 {:action=>"update", :controller=>"uploads"} 
     DELETE /uploads/:id(.:format)                 {:action=>"destroy", :controller=>"uploads"} 
       /download/:id(.:format)                {:controller=>"uploads", :action=>"download"} 

bearbeiten Hinweis: Wenn ich explizit ein img-Tag und zeigen die src meinem Bild machen es auf meiner Show Ansichten gut funktioniert, damit ich tun denke nicht, dass es ein Erlaubnisproblem ist.

+0

Wie ist der genaue Pfad zu Ihren Bildern? –

+0

rails_app/public/images/thumbnails/image.jpg – Noz

Antwort

7

Die Antwort war recht einfach, und ich kann nicht glauben, dass Rails ist dies pingelig, aber ich brauchte einen Schrägstrich am Anfang des Weges enthalten, wie so:

"thumbnails/fish.jpg" 

wird

"/thumbnails/fish.jpg" 

ich immer noch neugierig bin, warum dies ist nur ein Problem auf nicht-Index Ansichten ...

+0

Mit Nicht-Index-Ansichten meintest du diejenigen, die nicht "http: // example.com /" sind, aber "http: // example.com/someview" oder "http://beispiel.de/anotherview' Wenn ja, dann besteht der Unterschied darin, dass ein führender Schrägstrich einen absoluten Pfad aus Ihrer Indexansicht definiert. ohne den führenden Schrägstrich ist es ein relativer Pfad, was bedeutet, dass Sie auf '/ someview/thumbnails/fish.jpg' zugreifen, was der falsche Pfad ist. –

+0

Ich meinte wörtlich die Indexroute. Offensichtlich gibt es einen Unterschied zwischen "GET/model" und "GET/model/id", wenn Assets ausgeliefert werden. Entweder das oder es gibt ein Problem mit meinen Routen. – Noz

2

Möglicherweise müssen Sie diese Zeile auf true ändern:.

config.serve_static_assets = false 

in der Umwelt/* rb Datei (z development.rb).

Oder ich habe gesehen, wo dies ein Berechtigungsproblem für das fragliche Verzeichnis ist, so kann ein CHMOD 777 auf dem Verzeichnis es auflösen/Sie in die richtige Richtung weisen. Hier

ist ein SO ticket auf einem ähnlichen Problem

+0

Ich habe diese Zeile in keiner meiner enviroment.rbs tatsächlich - ich benutze Rails 3.1.3 – Noz

+0

Es ist nicht da, weil es bereits standardmäßig auf false, aber Sie kann es hinzufügen und es auf True setzen – vemv