Рубисты, выручайте! Как отрефакторить следующий метод?

Вот код:

def generate_link(campaign_id)

    source = self.find(campaign_id).source

    params = {}
    if source.sub1 != ''
      params[:sub1] = @source.sub1
    end
    if source.sub2 != ''
      params[:sub2] = @source.sub2
    end
    if source.sub3 != ''
      params[:sub3] = @source.sub3
    end
    if source.sub4 != ''
      params[:sub4] = @source.sub4
    end
    if source.sub5 != ''
      params[:sub5] = @source.sub5
    end
    if source.sub6 != ''
      params[:sub6] = @source.sub6
    end

    @link = Settings.tds.url + campaign_id + (params.present? ? ('?' + params.to_query) : '')
  end


Я просто еще плохо знаю такие средства на руби. Но я бы сделал как -

Объявил переменную (либо из Settings ее вытащил)

subs = [sub1, sub2, sub3, sub4, sub5, sub6]

Потом для каждого бы сделал что-то подобное, в стиле php::array_map() и получил бы новый массив, в зависимости от наличия source.sub1-6

а как бы тут сделали подобный код люди, которых улыбает мой код? :)

PS: "рублю" около недельки всего, так что не ругайтесь
  • Вопрос задан
  • 488 просмотров
Решения вопроса 1
@thepry
Ruby on rails, 1С разработчик
Хотя бы так :)
[:sub1, :sub2, :sub3, :sub4, :sub5, :sub6].each{ |sub| params[sub] = @source[sub] if @source[sub].present? }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы