Как избавиться от нескольких вызовов методов - PullRequest
1 голос
/ 08 марта 2019

У меня есть класс Search, где у меня есть метод, который обрабатывает запрос и возвращает идентификаторы пользователя.

Кроме того, у меня есть три метода, которые основаны на количестве результатов, они будут подсчитывать количество пользователей в определенной категории.

но получается, что мне приходится вызывать метод 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

1 Ответ

1 голос
/ 08 марта 2019

Вы можете написать это как

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

Таким образом, вы можете передать эти атрибуты в аргументе статуса, как показано ниже,

get_count_of(:archived)
get_count_of(:recruiting_status)
get_count_of(:retention_status)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...