Поддерживает ли ActionMailer представления только при вызове методов для его явного имени класса?(т.е. не "я") - PullRequest
0 голосов
/ 25 февраля 2012

Я замечаю очень странное поведение на моем CustomMailer (подкласс ActionMailer):

class CustomMailer < ActionMailer::Base

  def deliver(template) # with ":greeting" passed as argument

    # WORKS: Renders view app/views/custom_mailer/greeting
    CustomMailer.send(template)

    # BROKEN: Does not render view app/view/custom_mailer/greeting
    self.send(template)
  end

  def greeting # this gets called by both invocations, but
               # only the former renders the view. Why?
    ...
    mail(to: ...

Почему первый рендерит, а не второй?Вот мои гипотезы:

  • send нельзя вызвать на self, не вызывая махинаций
  • сумасшедшая магия, которая позволяет ActionMailer визуализировать представление (из того, что почтимодель) опирается на методы нацеливания, которые явно вызываются в CustomMailer
  • [обновить] что-то о self и методах экземпляров по сравнению с CustomMailer и методами класса?

1 Ответ

0 голосов
/ 25 февраля 2012

ActionMailer :: Base перегружает класс 'method_missing и вместо этого создает экземпляр, и в конце концов вызывает метод экземпляра и / или отображает представление.

...