如何摆脱几个方法调用

问题描述 投票:1回答:1

我有Search类,我有一个方法来处理请求并返回用户ID。

另外,我有三种基于结果数量的方法,它们可以计算特定类别中的用户数量。

但事实证明,我必须调用方法base_lead_scope 4次,是否有可能摆脱它?

def initialize(opts = {})
  opts.symbolize_keys!
  @params = opts[:params]
  @current_team = opts[:current_team]
  @current_user = opts[:current_user]
  @scope = base_lead_scope(opts[:overrides] || {})
end

def archived_count
  @archived_count ||= base_lead_scope(overrides: { archived: true })
                                      .including_referrals(user: current_user, team: current_team)
                                      .archived.total_count
end

def recruiting_count
  @recruiting_count ||= base_lead_scope(overrides: { archived: false })
                                        .including_referrals(user: current_user, team: current_team)
                                        .recruiting_status.total_count
end

def retention_count
  @retention_count ||= base_lead_scope(overrides: { archived: false })
                                        .including_referrals(user: current_user, team: current_team)
                                        .retention_status.total_count
end
ruby-on-rails ruby-on-rails-5
1个回答
1
投票

你可以把它写成,

def get_count_of(status)
  @archived_count ||= base_lead_scope(overrides: { archived: (status == :archieved ? true : false) })
    .including_referrals(user: current_user, team: current_team)
    .public_send(status)
    .total_count
end

所以你可以在status参数中传递这些属性,如下所示,

get_count_of(:archived)
get_count_of(:recruiting_status)
get_count_of(:retention_status)
© www.soinside.com 2019 - 2024. All rights reserved.