web-dev-qa-db-ja.com

ペーパークリップ添付ファイルの絶対URLを取得

Paperclip添付ファイルの絶対URIを取得することは可能ですか?現在、問題は本番環境がサブURI(乗客:RackBaseURI)にデプロイされていることですが、<Paperclip attachment>.urlはRailsアプリの相対URI(/system/images/...)。 Paperclip添付ファイルの絶対URIを取得する方法はありますか?

私はPaperclip v2.7とRails 3.2.8。

24
sleepy_keita

試す

URI.join(request.url, @model.attachment_name.url)

または

URI(request.url) + @model.attachment_name.url

S3または絶対URLを使用すると安全です。

更新:この答えは私のものより優れています;) https://stackoverflow.com/a/21027839/683157

28
kuboon
asset_url(model.attachment_name.url(:style))

関連するgithubの問題

41
Chris Bosco

この 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
18

これを行う最も広く適用可能な方法は、まず関連する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))
6
Paul Odeon

あなたはこれを行うことができます:

<%= 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)}" %>
5
iouri

これは元のポスターの問題を正確に解決するわけではありません(モデルではなくビューで動作します)が、ビュー内で「ペーパークリップ添付ファイルの絶対URLを取得」しようとしている人には役立つかもしれません。同じ方法で

image_tag(user.avatar.url(:large))

画像自体をビューに配置し、

image_url(user.avatar.url(:large))

アセットに直接リンクする場合に必要なURLのみを返します(例:link_to呼び出し)。

4
blahedo

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 を環境変数に置き換えることができます。

2
micred