我正在编写一个执行此操作的模型方法:
plan_one
。如果是,请停用plan_one
。plan_two
。如果没有,请将plan_two
添加到用户。我可以在一个方法中完成所有操作,还是需要设置第二种方法然后在第一种方法中调用它?
def have_plan_one?
# function that checks if user has a plan_one
sub.plans.active.where(name: plan_one).any?
# if user has plan 1, deactivate it
if sub.have_plan_one?
sub.plans.where(name: plan_one).deactivate
end
# if user doesn't have plan 2, add it
if sub.have_plan_two? == false
sub.plans.where(name: plan_two).add
end
end
def have_plan_two?
# function that checks if user has a plan_two
sub.plans.active.where(name: plan_two).any?
end
答案 0 :(得分:1)
将您的代码分离到不同的方法主要是关于概念方法而不是真正的技术差异。根据Sandy Metz的规则(https://robots.thoughtbot.com/sandi-metz-rules-for-developers),我建议你保留最多5行代码。我会选择这样的东西:
def switch_plans
deactivate_plan_one
activate_plan_two
end
def deactivate_plan_one
sub.plans.active.where(name: plan_one).first.try(:deactivate)
end
def activate_plan_two
sub.plan.where(name: plan_two).add if sub.have_plan_two? == false
end
你可以让switch_plans
只包含2行,我用不同的方法写,但我认为这肯定会在其他地方重复使用,所以我会保留它,就像我写的那样。
另外,我想提一下,方法内部的逻辑看起来仍不好看,你可以考虑一些方法来改善它