0

In my Rails app, I use a method in my Mailer views for creating a link that takes a format param based on whether it's in html or text format.

mailer_link_to( url, link_text, format )

Depending on the format, it either creates an anchor <a> tag for html or just shows the url for text.

So for each Mailer method, I have two views:

myemail.html.erb
myemail.text.erb

In myemail.html.erb, I use mailer_link_to( "http://ntwrkapp.com", "ntwrk", "html" ).

In myemail.text.erb I use mailer_link_to( "http://ntwrkapp.com", "ntwrk", "text" ).

What I'm wondering is if I can determine what the format is so I'm not having to duplicate myself so much and specify "html" or "text" each time.

If I was in a normal view/controller, I would do something like request.format but the request object isn't available in the Mailer views.

Thanks!

Joshua Pinter
  • 45,245
  • 23
  • 243
  • 245

1 Answers1

1

Use self.formats.

Discovered in this other answer that each view has a .formats method that contains an Array of formats that will get used in partials and whatnot:

self.formats #=> [:text]

So, you can use this to manually pass the current format to the mailer_link_to method like so:

mailer_link_to( "http://ntwrkapp.com", "ntwrk", self.formats.first )

And to preempt anybody saying I should just use a partial, which will automatically pass the correct format, I agree! I simplified my example for the sake of asking the question but in my actual use case I really did need to get the Mailer View's format manually. Thanks for trying to help, tho.

Joshua Pinter
  • 45,245
  • 23
  • 243
  • 245