我有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
你可以把它写成,
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)