使邮件功能更干

Making mailer functions more DRY

在邮件程序文件中,我有 11 个方法,所有方法都以

行开头
@reservation = reservation

有没有办法让它变干?我尝试了以下方法:

def set_reservation
  @reservation = reservation
end

然后

before_action :set_reservation

不幸的是,这总是给我一些类似的东西:

AgentReservationMailer#send_reserve_complete_mail: processed outbound mail in 1.7ms
NameError: undefined local variable or method `reservation' for #<AgentReservationMailer:0x007ffc9ae5bb38>

我仍然是一个非常初级的开发人员,但我想尽我所能尝试让事情看起来更专业 - 我正在尝试做的事情有可能吗?

您看到错误的原因是邮件程序不知道 set_reservation 方法中的变量 reservation。我假设您提到的 11 种方法使用

@reservation = reservation

reservation为参数。就目前而言,确实没有必要尝试减少重复。

附带说明一下,DRY 不是您应该盲目遵循的原则。如果您有几行在每种方法中都相同,那么这确实证明 "extract method" 重构是合理的。但是将 @reservation = reservation 赋值替换为例如一个方法调用 set_reservation(reservation),你仍然会在所有方法中重复一行。