Rails ApplicationMailer 奇怪的调用方法

zengfengbo · 发布于 2016年12月24日 · 最后由 mengqing 回复于 2017年1月03日 · 521 次阅读
96

正常的方法调用

class A
  def self.f1
    puts "the method of class"
  end
  def f2
    puts "the method of instance"
  end
end

A.f1
A.new.f2

UserMailer的方法调用

class UserMailer < ApplicationMailer
  def account_activation(user)
    @user = user
    mail(to: @user.email, subject: '激活帐号.')
  end
end

UserMailer.account_activation(@user).deliver_now

不应该是这样调用么?

UserMailer.new.account_activation(@user).deliver_now
共收到 4 条回复
9442

我记得论坛有人问过,搜索下。大概记得是method missing触发后查找实例方法,具体可以去追踪下源码。

96

谢谢,@blacktulip。还是存疑,为什么要绕一下,设置成这样。

13587

这是因为actionmailer的设计理念。因为ActionMailer的父类是一个Controller,而Controller理论上只应该应对一个action。ActionMailer所以要防止你写这样的代码

user_mailer = UserMailer.new
user_mailer.foo
user_mailer.bar
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册