Rails在分隔目录中的邮件程序视图

时间:2012-04-04 19:24:42

标签: ruby-on-rails ruby-on-rails-3

我有一个很小的组织问题,在我的应用程序中我有3个邮件程序User_mailer,prduct_mailer,some_other_mailer,所有这些都将他们的视图存储在app / views / user_mailer中......

我想在/ app / views /中设置一个名为mailers的子目录,并将所有文件放在user_mailer,product_mailer和some_other_mailer文件夹中。

谢谢,

5 个答案:

答案 0 :(得分:22)

我同意这种组织策略!

从Nobita的例子中,我通过以下方式实现了它:

class UserMailer < ActionMailer::Base
  default :from => "whatever@whatever.com"
  default :template_path => '**your_path**'

  def whatever_email(user)
    @user = user
    @url  = "http://whatever.com"
    mail(:to => user.email,
         :subject => "Welcome to Whatever",
         )
  end
end

这是梅勒特有的但不是太糟糕!

答案 1 :(得分:22)

您应该使用默认值创建一个ApplicationMailer类,并从邮件中继承该类:

# app/mailers/application_mailer.rb
class ApplicationMailer < ActionMailer::Base
  append_view_path Rails.root.join('app', 'views', 'mailers')
  default from: "Whatever HQ <hq@whatever.com>"
end

# app/mailers/user_mailer.rb
class UserMailer < ApplicationMailer
  def say_hi(user)
    # ...
  end
end

# app/views/mailers/user_mailer/say_hi.html.erb
<b>Hi @user.name!</b>

这个可爱的模式使用与控制器相同的继承方案(例如ApplicationController < ActionController::Base)。

答案 2 :(得分:12)

我在3.1

中有一些运气
class UserMailer < ActionMailer::Base
  ...
  append_view_path("#{Rails.root}/app/views/mailers")
  ...
end 

在template_root和RAILS_ROOT

上获得弃用警告

答案 3 :(得分:10)

如果您碰巧需要一些非常灵活的东西,继承可以帮助您。

class ApplicationMailer < ActionMailer::Base

  def self.inherited(subclass)
    subclass.default template_path: "mailers/#{subclass.name.to_s.underscore}"
  end

end

答案 4 :(得分:4)

您可以将模板放在任何位置,但您必须在邮件程序中指定它。像这样:

class UserMailer < ActionMailer::Base
  default :from => "whatever@whatever.com"

  def whatever_email(user)
    @user = user
    @url  = "http://whatever.com"
    mail(:to => user.email,
         :subject => "Welcome to Whatever",
         :template_path => '**your_path**',
         )
  end
end

请查看2.4 Mailer Views了解详情。