to_json rails 4 中的图像回形针中缺少域名
Domain name missing in image paperclip in to_json rails 4
我有像这样使用回形针的模型
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,
所以我必须在这里做什么
解决方案 1:(使用现有代码)
您可以使用 ActionView::Helpers::AssetUrlHelper
模块中的 asset_url,这将为您提供图像的绝对 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
的绝对值 url。这将是一个 URI
对象,可以使用 .to_s
方法将其转换为字符串。
这里是 issue from paperclip 这个解决方案的来源。希望这有帮助。
试试这个。
创建模块:
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
我有像这样使用回形针的模型
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, 所以我必须在这里做什么
解决方案 1:(使用现有代码)
您可以使用 ActionView::Helpers::AssetUrlHelper
模块中的 asset_url,这将为您提供图像的绝对 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
的绝对值 url。这将是一个 URI
对象,可以使用 .to_s
方法将其转换为字符串。
这里是 issue from paperclip 这个解决方案的来源。希望这有帮助。
试试这个。
创建模块:
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