【问题标题】:How can I get url for paperclip image in to_json如何在 to_json 中获取回形针图像的 url
【发布时间】:2011-04-07 21:59:32
【问题描述】:

我有一个使用回形针的模型,如下所示:

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

【问题讨论】:

    标签: ruby-on-rails paperclip


    【解决方案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 :methods arguments

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

    【讨论】:

    • 示例表明 avatar_url 返回绝对 URL,而它返回相对 URL。如果您需要绝对网址,请查看stackoverflow.com/a/12556347/257443
    • 这也适用于收藏! (例如@models.to_json(methods: [:example])
    • 是不是写的太多了?如果您需要 5 个不同模型上的 4 个不同尺寸的图像,您需要为每个模型编写一个方法吗?它不能只返回回形针的所有图像尺寸吗?
    • 你可以像这样使用它来渲染所有尺寸def avatar_url [ medium: avatar.url(:medium), original: avatar.url ] end
    【解决方案2】:

    显示图像 json 的显示控制器

    localhost:3000/cities/1.json

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-08
      • 1970-01-01
      • 2017-09-25
      • 2013-12-23
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      相关资源
      最近更新 更多