web-dev-qa-db-ja.com

to_jsonでペーパークリップ画像のURLを取得する方法

私はこのようなペーパークリップを使用するモデルを持っています:

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
37
Giancarlo Corzo

これを実現する最も簡単な方法は、アバター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:methods arguments

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

59
Ben Zittlau

表示画像jsonのshow controller

localhost:3000/cities/1.json

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