Как я могу получить url для paperclip изображения в to_json
У меня есть модель, которая использует paperclip следующим образом:
has_attached_file :avatar, :styles => { :large => "100x100>" , :medium => "50x50>", :small => "20x20>" }, :default_url => '/images/missing-owner_:style.png'
Я экспортирую эту модель с помощью метода to_json, и я хочу экспортировать URL-адрес изображения, чтобы использовать его в javascript.
Я знаю, что могу получить доступ к этому URL-адресу в представлении:
<%= image_tag model.avatar.url(:medium) %>
Но как я могу сделать то же самое в методе to_json.
У меня есть несколько таких:
respond_to do |format|
render :json => @model.to_json(:only => [:id,:name,:homephone,:cellphone])
end
Ответы
Ответ 1
Я считаю, что самый простой способ добиться этого - создать метод в вашем объекте, чтобы вернуть URL-адрес аватара.
class Model < ActiveRecord::Base
...
def avatar_url
avatar.url(:medium)
end
...
end
Это позволит вам использовать опцию методов при вызове to_json с помощью простого метода, который не требует каких-либо параметров:
respond_to do |format|
render :json => @model.to_json(:only => [:id,:name,:homephone,:cellphone], :methods => [:avatar_url])
end
Что должно дать вам выход по этим строкам:
{"id" => 1, "name" => "Cool model", "homephone" => 1234567890, "cellphone" => 0987654321, "avatar_url" => "www.coolsite.com/this_avatars_path"}
См. их для справки:
Ruby to_json: аргументы методов
http://apidock.com/rails/ActiveRecord/Serialization/to_json
Ответ 2
показать контроллер для отображения изображения json
локальный: 3000/города/1.json
respond_to do |format|
format.html
format.json { render :json => @model.to_json(:methods => [:model_url]) }
end