[英]Rails code block in controller for repeated code
在我的Rails应用程序中,我使用odf-report gem生成报告。 但是,我的方法中有一个if condition
,每个子句中有相同的110行代码,最后有一个或两个更改。 我想知道是否有办法定义在代码块中重复的110行,然后在我的main方法中调用该代码块? 下面是该方法的示例:
def print_enrolment_form_completed
kid = Kid.find(params[:id])
if kid.not_anaphylactic?
report = ODFReport::Report.new("#{Rails.root}/app/reports/Student_Enrolment_Completed.odt") do |r|
#same 110 lines of code
end
else
report = ODFReport::Report.new("#{Rails.root}/app/reports/Student_Enrolment_Completed_Allergy.odt") do |r|
#same 110 lines of code
r.add_field(:a2, kid.fish ? "Yes" : "No" )
r.add_field(:a3, kid.eggs ? "Yes" : "No" )
r.add_field(:a4, kid.milk ? "Yes" : "No" )
end
end
end
我的目标是产生一个代码块,其中的注释在上面列出,并在控制器的其他位置定义110行。 任何想法表示赞赏!
如果您在控制器操作上有1000条线路,那您做错了。 我认为您应该考虑延迟的工作/现役或sidekiq或resque
您是否只能创建一个包含110行代码的方法并在if语句中使用它?
def method_name(z, y)
puts z + y
end
x = 4
if x > 3
method_name(6, 7)
else
method_name(1, 4)
end
可以肯定的是,控制器中的许多代码行都有代码味道,而不仅仅是缺乏DRYness。
也就是说,您可能不在现在可以进行完整重构的地方。 两个分支之间唯一的区别是传递给新行的字符串和末尾的三行。
report = ODFReport::Report.new(kid.not_anaphylactic? ? "#{Rails.root}/app/reports/Student_Enrolment_Completed.odt" : "#{Rails.root}/app/reports/Student_Enrolment_Completed_Allergy.odt") do |r|
#same 110 lines of code
If kid.not_anaphylactic?
r.add_field(:a2, kid.fish ? "Yes" : "No" )
r.add_field(:a3, kid.eggs ? "Yes" : "No" )
r.add_field(:a4, kid.milk ? "Yes" : "No" )
end
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.