我有使用像这样的回形针的模型
has_attached_file :image, styles: { :medium => "50x50>" }
validates_attachment_content_type :image, content_type: /\Aimage\/.*\Z/
def image_url
image.url(:medium)
end
我需要它Json,所以在我的控制器中,
respond_to do |format|
format.json { render json: @celebrity.to_json(:methods => [:image_url])}
end
结果是
"image_url":"/system/celebrities/images/000/000/003/medium/Designed___developed_by_wd_ApS.png?1430926991"
但是,我需要包含域名localhost:3000, 所以我必须在这做什么
答案 0 :(得分:1)
试试这个。
创建模块:
module WithDomain
def domain
@domain
end
def domain=(val)
@domain = val
end
def domain?
@domain.present?
end
end
相应地更改模型:
class Celebtiry < ActiveRecord::Base
include WithDomain
# existing staff
def image_url
if domain?
URI.join(domain, image.url(:medium)).to_s
else
image.url(:medium)
end
end
end
并在您的控制器中:
respond_to do |format|
format.json {
@celebrity.domain = request.base_url
render json: @celebrity.to_json(:methods => [:image_url])
}
end
答案 1 :(得分:0)
您可以使用ActionView::Helpers::AssetUrlHelper
模块中的asset_url,它会为您提供图片的绝对网址。只需在模型中include ActionView::Helpers::AssetUrlHelper
这样,即可在模型中使用asset_url
。
因此,模型中的方法是:
include ActionView::Helpers::AssetUrlHelper
def image_url
asset_url(image.url(:medium))
end
使用您当前的代码,这是最简单的解决方案。
在你的控制器中request
可用,所以你可以这样做:
URI.join(request.url, @celebrity.image.url(:medium))
将为您提供image
的绝对网址。这将是一个URI
对象,可以使用.to_s
方法转换为字符串。
以下是导出此解决方案的issue from paperclip。希望这会有所帮助。