2

我需要从控制器渲染出一个json输出,并且我想在 json 中包含我的图像的缩略图版本。

如果我只使用它来渲染 json,:image_url它会输出完整的图像 url,如果我使用:image它,它将列出所有可用的图像(包括缩略图)。

如何在 json 中仅渲染图像的缩略图版本?

谢谢,

4

2 回答 2

5

你应该使用这样的东西。

class ArtworkSerializer < ActiveModel::Serializer
    attributes :id, :name, :image_url

    def image_url
      object.image_url(:thumbnail)
    end
  end

然后在您的 JSON 响应中,您将拥有一个属性:image_url

注意:您应该在您的 carrierwave 上传器中定义一个版本 :thumbnail。

于 2013-03-27T07:58:55.027 回答
2

我建议你像这样使用序列化器:

class YourSerializer < ActiveModel::Serializer
  attributes(
    :id,
    :image,
    :small,
    :medium,
    :large
  )

  def small
    url(width: 116, height: 116, crop: "fill")
  end

  def medium
    url(width: 640, height: 400, crop: "fill")
  end

  def large
    url(width: 1000, crop: "fill")
  end

  private

  def url(options={})
    options[:format] = "png"
    options[:secure] = true

    object.image_url(options)
  end
end

如果您坚持使用缩略图或已定义的版本,请使用:

def url
      object.image_url(:thumbnail)
end
于 2014-06-06T11:24:49.997 回答