新手问题 UserMailer 里边定义的方法都是类方法?

QETHAN · 发布于 2016年12月03日 · 最后由 zengfengbo 回复于 2017年1月02日 · 422 次阅读
96
class UserMailer < ApplicationMailer
  default from: "xxx@example.com"


  def account_activation(user)
    @user = user
    mail to: user.email, subject: "账户激活"
  end

  def password_reset
    @greeting = "Hi"

    mail to: "to@example.org"
  end
end

在控制器里使用的时候都是直接用 UserMailer.account_activation(user), 不明白account_activation为什么变成了类方法

共收到 3 条回复
468
leekelby · #1 · 2016年12月03日 3 个赞

父类 ActionMailer::Base 有个 method_missing 方法
父类的父类 AbstractController::Base 有个 action_methods 方法

直接调用类方法 account_activation 会触发 method_missing
经过 method_missingaction_methods 进行处理 & 调用对应的实例方法 account_activation

96
QETHAN · #2 · 2016年12月03日
207 blacktulip ApplicationMailer 奇怪的调用方法 中提及了此贴 12月24日 00:45
96
zengfengbo · #4 · 2017年1月02日

为什么要这么处理呢?直接定义类方法不好?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册