好的,我發現這個問題,因爲rails是關於約定的,所以當傳遞給郵件的「BODY」是零時,它會嘗試從類名中猜測模板路徑名和視圖名。所以即直接使用這種方法。我不得不調試rails框架來找出這個問題:
I.e.關於gems/actionmailer-4.1.6/lib/action_mailer/base.rb:
這個方法是問題的答案,你可以看到如果body eval爲nil,那麼它就是猜測路徑名的路線,等:
def collect_responses(headers) #:nodoc:
responses = []
if block_given?
collector = ActionMailer::Collector.new(lookup_context) { render(action_name) }
yield(collector)
responses = collector.responses
elsif headers[:body]
responses << {
body: headers.delete(:body),
content_type: self.class.default[:content_type] || "text/plain"
}
else
templates_path = headers.delete(:template_path) || self.class.mailer_name
templates_name = headers.delete(:template_name) || action_name
each_template(Array(templates_path), templates_name) do |template|
self.formats = template.formats
responses << {
body: render(template: template),
content_type: template.type.to_s
}
end
end
responses
end