Obtenir L'URL absolue pour l'attachement de trombone

est-il possible d'obtenir L'URI absolue pour une attache de trombone? En ce moment, le problème est que l'environnement de production est déployé dans une sous-URI (sur les passagers:RackBaseURI), mais <paperclip attachment>.url retourne les Rails-app URI relatif (

7 ответов

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

ou

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

il est sûr si vous utilisez S3 ou l'url absolue.

mise à Jour: cette réponse est meilleure que la mienne ;) https://stackoverflow.com/a/21027839/683157

27
répondu kuboon 2017-05-23 15:18:00
la source
asset_url(model.attachment_name.url(:style))

question pertinente de github

38
répondu Chris Bosco 2014-08-09 00:40:18
la source

selon ceci github question, il est plus propre d'utiliser ActionController::Base.asset_host de sorte qu'il résulterait le helper:

  def add_host_prefix(url)
    URI.join(ActionController::Base.asset_host, url)
  end

Cela suppose que vous avez dans chaque /config/environments/<environment>.rb le fichier suivant:

Appname::Application.configure do

  # ....

  config.action_controller.asset_host = 'http://localhost:3000' # Locally

  # ....

end
17
répondu Augustin Riedinger 2014-01-09 22:05:54
la source

la façon la plus largement applicable de faire ceci est d'abord de définir vos hôtes actifs dans le fichier de configuration/environnement pertinent:

config.action_controller.asset_host = "http://assethost.com"
config.action_mailer.asset_host = "http://assethost.com"

Puis dans les vues et les mails:

asset_url(model.attachment.url(:style))

Dans la console:

helper.asset_url(model.attachment.url(:style))

modèle:

ApplicationController.helpers.asset_url(model.attachment.url(:style))
6
répondu Paul Odeon 2014-12-04 00:15:50
la source

Vous pouvez faire ceci:

<%= image_tag "#{request.protocol}#{request.host_with_port}#{@model.attachment_name.url(:attachment_style)}" %>

ou faites une méthode d'aide pour l'envelopper.

def absolute_attachment_url(attachment_name, attachment_style = :original)
  "#{request.protocol}#{request.host_with_port}#{attachment_name.url(attachment_style)}"
end

Et l'utiliser comme ceci:

<%= image_tag absolute_attachment_url(attachment_name, :attachment_style)}" %>

Ex: Modèle = Personne (@personne), attachment_name = avatar, style = :le pouce

<%= image_tag absolute_attachment_url(@person.avatar, :thumb)}" %>
5
répondu iouri 2012-09-24 01:19:33
la source

cela ne résout pas exactement le problème de l'affiche originale (il fonctionne dans la vue, pas le modèle), mais peut être utile pour les gens qui essaient "d'obtenir L'URL absolue pour l'attachement de trombone" dans leur vue: de la même manière que

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

met l'image elle-même dans votre vue,

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

renvoie juste L'URL dont vous aurez besoin si vous voulez lier directement à l'actif (par exemple dans un link_to appel).

4
répondu blahedo 2014-07-17 00:25:57
la source

Vous pouvez ajouter à votre application.rb (ou pour un environnement spécifique en 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',
}

redémarrez et réimportez vos images.

PS: évidemment vous pouvez remplacer http://my.address.com avec une variable d'environnement.

1
répondu micred 2017-06-06 18:57:51
la source

Autres questions sur