Paperclip添付ファイルの絶対URIを取得することは可能ですか?現在、問題は本番環境がサブURI(乗客:RackBaseURI
)にデプロイされていることですが、<Paperclip attachment>.url
はRailsアプリの相対URI(/system/images/...
)。 Paperclip添付ファイルの絶対URIを取得する方法はありますか?
私はPaperclip v2.7とRails 3.2.8。
試す
URI.join(request.url, @model.attachment_name.url)
または
URI(request.url) + @model.attachment_name.url
S3または絶対URLを使用すると安全です。
更新:この答えは私のものより優れています;) https://stackoverflow.com/a/21027839/683157
asset_url(model.attachment_name.url(:style))
この githubの問題 によると、ActionController::Base.asset_Host
ヘルパーになります:
def add_Host_prefix(url)
URI.join(ActionController::Base.asset_Host, url)
end
これは、すべての/config/environments/<environment>.rb
次のファイル:
Appname::Application.configure do
# ....
config.action_controller.asset_Host = 'http://localhost:3000' # Locally
# ....
end
これを行う最も広く適用可能な方法は、まず関連するconfig/environmentファイルでアセットホストを定義することです。
config.action_controller.asset_Host = "http://assethost.com"
config.action_mailer.asset_Host = "http://assethost.com"
次に、ビューとメーラーで:
asset_url(model.attachment.url(:style))
コンソールで:
helper.asset_url(model.attachment.url(:style))
モデル内:
ApplicationController.helpers.asset_url(model.attachment.url(:style))
あなたはこれを行うことができます:
<%= image_tag "#{request.protocol}#{request.Host_with_port}#{@model.attachment_name.url(:attachment_style)}" %>
または、それをラップするヘルパーメソッドを作成します。
def absolute_attachment_url(attachment_name, attachment_style = :original)
"#{request.protocol}#{request.Host_with_port}#{attachment_name.url(attachment_style)}"
end
次のように使用します。
<%= image_tag absolute_attachment_url(attachment_name, :attachment_style)}" %>
例:モデル= Person(@person)、attachment_name =アバター、style =:thumb
<%= image_tag absolute_attachment_url(@person.avatar, :thumb)}" %>
これは元のポスターの問題を正確に解決するわけではありません(モデルではなくビューで動作します)が、ビュー内で「ペーパークリップ添付ファイルの絶対URLを取得」しようとしている人には役立つかもしれません。同じ方法で
image_tag(user.avatar.url(:large))
画像自体をビューに配置し、
image_url(user.avatar.url(:large))
アセットに直接リンクする場合に必要なURLのみを返します(例:link_to
呼び出し)。
application.rb
(またはconfig/environments/*
の特定の環境)に追加できます。
config.Paperclip_defaults = {
url: "http://my.address.com/system/:class/:attachment/:id_partition/:style.:extension",
path: ':Rails_root/public/system/:class/:attachment/:id_partition/:style.:extension',
}
画像を再起動して再インポートします。
PS:明らかに http://my.address.com を環境変数に置き換えることができます。