Pergunta

I'm trying so send an email like this

mail(:to => @user.email, :from => from_email, :subject => t('orders.invoice.email_subject'), :content_type => "text/html") do |format|
    format.html { render partial: "notifier/follow_up_email.#{I18n.locale}.html.erb", locals: {storefront: storefront, order: order} }
end

Unfortunately, rails is only looking for follow_up_email.en.html and not follow_up_email.en.html.erb - What am I doing wrong?

Foi útil?

Solução

render partial: ... should not contain file extensions such as en.html.erb since they are automagically added.

http://api.rubyonrails.org/classes/ActionView/PartialRenderer.html

But why do you use partials for mails, couldn't you create a proper view?

UPDATE

It's all described in the guide on http://guides.rubyonrails.org/v3.2.16/action_mailer_basics.html

app/mailers/user_mailer.rb:

class UserMailer < ActionMailer::Base

  default from: "no-reply@memyselfandi.com"

  def notification(user, storefront, order)
    @user, @storefront, @order = user, storefront, order
    I18n.locale = @user.locale    # see note below
    mail to: @user.email, subject: I18n.t('orders.invoice.email_subject')
  end

end

app/views/user_mailer/notification.en.html.erb:

<html><body>
This is a mail for <%= @user.email %> yadda yadda. Use @storefront and @order here.
</body></html>

app/views/user_mailer/notification.de.html.erb:

<html><body>
Das ist ein mail für <%= @user.email %> bla bla.
</body></html>

The line I18n.locale = @user.locale is only necessary if you want to send async mails e.g. when triggering rake tasks from a cronjob.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top