Dmi*_*tri 15 ruby ruby-on-rails erb actionmailer local-variables
我知道我可以定义实例变量,例如:
def user_register(username, email)
@username = username
@email = email
mail(:to => email, :subject => "Welcome!", :template_name => "reg_#{I18n.locale}")
end
Run Code Online (Sandbox Code Playgroud)
但是,有没有办法使用局部变量,就像传递:locals到partials?
rap*_*1ds 23
作为ronalchn指出,这是render有:locals,而不是mail方法.因此,您需要直接访问该render方法才能传递本地.
你可以给一个块,mail并以这种方式获得对render方法的访问,如下所示:
mail(to: "your_mail@example.com", subject: "Test passing locals to view from mailer") do |format|
format.html {
render locals: { recipient_name: "John D." }
}
end
Run Code Online (Sandbox Code Playgroud)
现在你应该可以使用了 "Hello <%= recipient_name %>"
ron*_*chn 11
该mail方法中提供的所有选项均可在http://api.rubyonrails.org/classes/ActionMailer/Base.html#method-i-mail中找到.
我们知道render有一个:locals选择.但是我们可以看到没有:locals可用的选项mail.因此,不,没有比使用实例变量更好的方法(除非你想使用类似全局或持久数据库对象的东西 - 不要这样做).
实例变量就是您要使用的.