【问题标题】:Making mailer functions more DRY [closed]使邮件功能更加干燥[关闭]
【发布时间】:2017-09-06 03:56:50
【问题描述】:

在邮件程序文件中,我有 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>

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

【问题讨论】:

    标签: ruby-on-rails methods dry mailer


    【解决方案1】:

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

    @reservation = reservation
    

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

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

    【讨论】:

    • 在意识到这里不可能有before_action 之后,我得出了同样的结论。关于保留是每种方法的参数,您是绝对正确的。谢谢:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多