Hey Philip,

Thanks a lot! Based on your comment, I reread the AssetTagHelper and
found a nice(r) solution:

I put the following in development.rb:

ENV['HOST'] = 'http://localhost:3000'

# images in emails have to have absolute urls
ActionController::Base.asset_host = Proc.new do |source|
  if source.starts_with?('/images/email/')
    ENV['HOST']
  else
    ""
  end
end

And then it works:

>> ActionView::Base.new.image_tag('/images/email/header.gif')
=> "<img alt=\"Header\" src=\"http://localhost:3000/images/email/
header.gif?1234982332\" />"
>> ActionView::Base.new.image_tag('/images/project/header.gif')
=> "<img alt=\"Header\" src=\"/images/project/header.gif\" />"

Although I am not sure this is more robust thatn my prev. solution
since the host has to be set explicitly.

Anyway, thank you,
Balint
On Feb 19, 6:10 pm, Philip Hallstrom <[email protected]> wrote:
> > I am sending out html emails. It seems to me that in order for the
> > images to be properly shown in the email, their src needs to be
> > absolute.
>
> > More precisely, /images/email/header.gif will not work, but
> >http://localhost:3000/images/email/header.gifwill. (If someone can
> > refute me here, I am eager to hear it).
>
> I can't.  That's been my experience.  Also, the images have to come  
> from the same domain as the email is from...
>
>
>
> > So I was looking to use the
> > image_tag helper to get the absolute url for the image source but I
> > could not figure out a solution. So what I am currently doing is this:
>
> > class UserMailer < ActionMailer::Base
> >    def setup_email(user)
> >      (...)
> >      url_with_host = url_for(:controller => "home", :action =>
> > "index", :only_path => false)
> >      host_pattern = /^(.*:\/\/.+?)\/.*$/
> >     �...@body[:http_host] = url_with_host[host_pattern, 1]
> >      content_type "text/html"
>
> >    end
> > end
>
> > (setup_email is then called from the actual mailer methods)
>
> > But this is a hack and it supposes that there is a "home" controller.
> > Having the image_tag helper accept the :only_path parameter would be a
> > nice solution. I am curious to find out how others deal with this
> > problem since it does not seem to be so particular.
>
> Consider setting the asset host to the URL.  That should turn those  
> image_tags()'s into full URLs.  Not sure if there is a way to do that  
> only for email and not the entire site though.
>
> -philip
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to