2010-10-14 6 views
0

Comment renvoyer une image dans le bloc respond_to do |format|? Je ai déjà l'image entièrement assemblé (c'est-à-dire pas laid assemblage de blogs) et à une URL particulière (parce qu'il est dans le dossier public), j'ai juste besoin de pouvoir retourner cette image pour une autre requête URL particulière.renvoyer une image avec response_to

Par exemple, l'image est dans

public/cars/userid/car_id/random_name.JPG 

et je veux être en mesure de servir cette image lorsqu'un utilisateur va

http://mywebsite.com/car_id.JPG 

parce qu'il est prohibitif pour que l'utilisateur doit connaître le userid et random_name. J'ai l'url public/cars/userid/car_id/random_name.JPG déjà comme @car.public_filename, parce que @car est un objet attachment_fu.

Répondre

1

Vous pouvez rediriger le navigateur vers l'image:

redirect_to @car.public_filename 
+0

Désolé, je suppose que je devrais avoir été plus clair. Je veux cacher les détails du stockage de l'utilisateur. [* Modifier *: Rédaction commentaire sur la redirection pour l'intégration d'images dans les pages; Il semble que ça devrait aller de soi de ce point de vue.] – unsorted

+0

Aussi, quand je dis à rails de répondre à format.jpg, il me donne une erreur à propos d'un MimeType JPG inexistant. Des idées sur la façon de le gérer quand même? Merci pour votre réponse rapide. – unsorted

+0

Les types mime pour les images sont formatés comme: «image/jpg», «image/jpeg», «image/png», «image/gif», etc. Si les types mime d'image ne sont pas ajoutés Par défaut, voir l'autre réponse de Matt pour savoir comment enregistrer des types supplémentaires. – Jeremy

0

Si vous souhaitez utiliser un autre type MIME dans respond_to, vous pouvez l'ajouter à config/initializers/mime_types.rb. Voici un exemple:

Mime::Type.register "text/richtext", :rtf 
1

Vous pouvez également écrire un petit middleware métallique pour dérouter toute l'url /car_id.JPG au fichier réel:

#app/metal/serve_car.rb 
# Allow the metal piece to run in isolation 
require(File.dirname(__FILE__) + "/../../config/environment") unless defined?(Rails) 

class ServeCar 
    def self.call(env) 
    if env["PATH_INFO"] =~ /^\/car_(\d+).JPG$/ 
     path = Car.find($1).public_filename 
     [302, {"Content-Type" => "text/html", "Location" => path}, ["You are being redirected"]] 
    else 
     [404, {"Content-Type" => "text/html"}, ["Not Found"]] 
    end 
    end 
end 
Questions connexes