web-dev-qa-db-fra.com

Comment puis-je obtenir l'URL de l'image Paperclip dans to_json

J'ai un modèle qui utilise Paperclip comme ceci:

has_attached_file :avatar, :styles => { :large => "100x100>" , :medium => "50x50>", :small => "20x20>" },  :default_url => '/images/missing-owner_:style.png'

J'exporte ce modèle avec la méthode to_json et je veux exporter l'url de l'image pour pouvoir l'utiliser en javascript.

Je sais que je peux accéder à l'URL comme ceci dans la vue:

<%= image_tag model.avatar.url(:medium) %>

Mais comment puis-je faire de même dans la méthode to_json.

J'en ai comme ça:

respond_to do |format|
   render :json => @model.to_json(:only => [:id,:name,:homephone,:cellphone])
end
37
Giancarlo Corzo

Je crois que le moyen le plus simple pour vous d'accomplir cela sera de créer une méthode dans votre objet pour renvoyer l'URL de l'avatar.

class Model < ActiveRecord::Base
    ...

    def avatar_url
        avatar.url(:medium)
    end

    ...
end

Cela vous permettra ensuite d'utiliser l'option méthodes lors de l'appel à to_json avec une méthode simple qui ne nécessite aucun paramètre:

respond_to do |format|
   render :json => @model.to_json(:only => [:id,:name,:homephone,:cellphone], :methods => [:avatar_url])
end

Ce qui devrait vous donner une sortie dans ce sens:

{"id" => 1, "name" => "Cool model", "homephone" => 1234567890, "cellphone" => 0987654321, "avatar_url" => "www.coolsite.com/this_avatars_path"}

Voir ceux-ci pour référence:

Ruby to_json: arguments des méthodes

http://apidock.com/Rails/ActiveRecord/Serialization/to_json

59
Ben Zittlau

show controller pour afficher l'image json

localhost: 3000/villes/1.json

respond_to do |format|
  format.html
  format.json { render :json => @model.to_json(:methods => [:model_url]) }
end
1
vinodh