我需要从控制器渲染出一个json输出,并且我想在 json 中包含我的图像的缩略图版本。
如果我只使用它来渲染 json,:image_url
它会输出完整的图像 url,如果我使用:image
它,它将列出所有可用的图像(包括缩略图)。
如何在 json 中仅渲染图像的缩略图版本?
谢谢,
我需要从控制器渲染出一个json输出,并且我想在 json 中包含我的图像的缩略图版本。
如果我只使用它来渲染 json,:image_url
它会输出完整的图像 url,如果我使用:image
它,它将列出所有可用的图像(包括缩略图)。
如何在 json 中仅渲染图像的缩略图版本?
谢谢,
你应该使用这样的东西。
class ArtworkSerializer < ActiveModel::Serializer
attributes :id, :name, :image_url
def image_url
object.image_url(:thumbnail)
end
end
然后在您的 JSON 响应中,您将拥有一个属性:image_url
。
注意:您应该在您的 carrierwave 上传器中定义一个版本 :thumbnail。
我建议你像这样使用序列化器:
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