检查用户是否有计划然后添加另一个计划的方法

时间:2017-11-02 10:11:25

标签: ruby-on-rails

我正在编写一个执行此操作的模型方法:

  • 检查用户是否有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

1 个答案:

答案 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行,我用不同的方法写,但我认为这肯定会在其他地方重复使用,所以我会保留它,就像我写的那样。

另外,我想提一下,方法内部的逻辑看起来仍不好看,你可以考虑一些方法来改善它