Как я могу получить URL для изображения скрепки в to_json - PullRequest
37 голосов
/ 08 апреля 2011

У меня есть модель, которая использует скрепку, как это:

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

Ответы [ 2 ]

59 голосов
/ 08 апреля 2011

Я полагаю, что самый простой способ сделать это - создать в вашем объекте метод, возвращающий 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

1 голос
/ 19 апреля 2014

показать контроллер для отображения изображения json

localhost: 3000 / towns / 1.json

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