Application helper methods in mailers not available?


#1

Hi all

I have some methods in application.rb and make them accessible to view
using

helper_method :xxx

Sadly they don’t seem to be available in mailer templates? Is that
normal? Or did I miss something?

Thanks
Josh


#2

On 22 Oct 2008, at 14:20, Joshua M. wrote:

That’s normal. ActionMailer classes don’t inherit from
ApplicationController so it is normal that the methods in there do not
magically appear in ActionMailer instances/views.

Fred


#3

Frederick C. wrote:

On 22 Oct 2008, at 14:20, Joshua M. wrote:

That’s normal. ActionMailer classes don’t inherit from
ApplicationController so it is normal that the methods in there do not
magically appear in ActionMailer instances/views.

Fred

Thanks for your reply. But this seems a little bit strange to me… All
in all a view is a view, whether it’s a “normal” or a mailer’s one,
right?

So what can I do to access my helpers in the mailer’s view?

Thanks


#4

Frederick C. wrote:

On Oct 23, 2:58�am, Joshua M. removed_email_address@domain.invalid
wrote:

in all a view is a view, whether it’s a “normal” or a mailer’s one,
right?

You’re right, it’s mostly an infratructure problem here. You just
can’t steal methods defined in a completely separate place.

So what can I do to access my helpers in the mailer’s view?

One way would be to define them in a module which you include in
ApplicationController and in the mailer (Use the helper method in the
latter).

Fred

Thanks for the idea. Where should I put the module?


#5

On Oct 23, 2:58 am, Joshua M. removed_email_address@domain.invalid
wrote:

in all a view is a view, whether it’s a “normal” or a mailer’s one,
right?

You’re right, it’s mostly an infratructure problem here. You just
can’t steal methods defined in a completely separate place.

So what can I do to access my helpers in the mailer’s view?

One way would be to define them in a module which you include in
ApplicationController and in the mailer (Use the helper method in the
latter).

Fred


#6

It seems helper :helper_name doesn’t work anymore (2.3.4)

You can use include instead:

class Mailer < AM::Base
include CoolHelper

end

Al Iv wrote:

Just include in your mailer model

helper :application

for example:
class MessageMailer < ActionMailer::Base

helper :application

def sent(message)

end
end
On Oct 25 2008, 12:35�am, Joshua M. <rails-mailing-l…@andreas-


#7

Just include in your mailer model

helper :application

for example:
class MessageMailer < ActionMailer::Base

helper :application

def sent(message)

end
end
On Oct 25 2008, 12:35 am, Joshua M. <rails-mailing-l…@andreas-


#8

Actually, I’m mistaken. I didn’t read the post properly.

You use include if you want it available in the class itself, then
helper :helper_name if you want it available in the views.

Ramon T.

On Mon, Oct 26, 2009 at 12:19 AM, Ramon T.