在 rails 中干掉方法调用
DRYing up method calls in rails
我有一个方法类型相似的代码header。我通过每次定义新的 def 并使用 If..else 条件来调用每个方法。
def main_fun(data)
id = data[0]
day = data[1]
if day === 1
fun1(id)
elsif day === 2
fun2(id)
elsif day === 3
fun3(id)
end
end
def fun1(id)
SomeClass::Mailer.fun_1days(id).deliver_now
end
def fun2(id)
SomeClass::Mailer.fun_2days(id).deliver_now
end
def fun3(id)
SomeClass::Mailer.fun_3days(id).deliver_now
end
# have to add more methods for (4,5,6...) in future.
你能帮我吗干掉这些方法调用这样我就可以用最少的更新添加新方法?
这里的主要问题是邮件程序的体系结构 class 和方法。您真的需要三种不同的邮件方式吗?还是可以将其干燥?
你可以传入天数和模板名称
class Mailer < ApplicationMailer
def fun(id, day_count)
user = User.find(id)
template = "fun_#{day_count}days"
mail(:to => "#{@user.name} <#{@user.email}>",
:subject => "Fun #{days}",
:template_name => template)
end
end
在你的主要功能中你可以做
def main_fun(data)
id = data[0]
day = data[1]
Mailer.fun(id, day).deliver_now
end
像 send
/ public_send
这样的元编程是一个强大的工具,如果你开发一个例如库,但在这种情况下,它使代码更难理解和维护。此更改还使代码更易于扩展。如果你想引入一个 4 天的邮件,你只需要为它添加另一个模板,而不需要在邮件程序中 c&p 另一个方法 class.
我有一个方法类型相似的代码header。我通过每次定义新的 def 并使用 If..else 条件来调用每个方法。
def main_fun(data)
id = data[0]
day = data[1]
if day === 1
fun1(id)
elsif day === 2
fun2(id)
elsif day === 3
fun3(id)
end
end
def fun1(id)
SomeClass::Mailer.fun_1days(id).deliver_now
end
def fun2(id)
SomeClass::Mailer.fun_2days(id).deliver_now
end
def fun3(id)
SomeClass::Mailer.fun_3days(id).deliver_now
end
# have to add more methods for (4,5,6...) in future.
你能帮我吗干掉这些方法调用这样我就可以用最少的更新添加新方法?
这里的主要问题是邮件程序的体系结构 class 和方法。您真的需要三种不同的邮件方式吗?还是可以将其干燥?
你可以传入天数和模板名称
class Mailer < ApplicationMailer
def fun(id, day_count)
user = User.find(id)
template = "fun_#{day_count}days"
mail(:to => "#{@user.name} <#{@user.email}>",
:subject => "Fun #{days}",
:template_name => template)
end
end
在你的主要功能中你可以做
def main_fun(data)
id = data[0]
day = data[1]
Mailer.fun(id, day).deliver_now
end
像 send
/ public_send
这样的元编程是一个强大的工具,如果你开发一个例如库,但在这种情况下,它使代码更难理解和维护。此更改还使代码更易于扩展。如果你想引入一个 4 天的邮件,你只需要为它添加另一个模板,而不需要在邮件程序中 c&p 另一个方法 class.