Ruby если внутри карты передать в хеш - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть метод, в котором я перебираю ха sh на .map, чтобы создать еще один ха sh в качестве результата.

def assigned_task_list
  assigned_tasks.map do |issue|
    {
      key: issue.key,
      desired_time_to_resolution: issue.customfield_14777.dig('ongoingCycle', 'remainingTime', 'friendly'),
      time_to_resolution: issue.customfield_10031.dig('ongoingCycle', 'remainingTime', 'friendly'),
      name: issue.name
    }
  end
end

Как поместить блок if внутрь этого га sh, чтобы решить поместить туда desired_time_to_resolution: или time_to_resolution?

Я имею в виду, если блок такой:

if issue.customfield_14777.nil?
  desired_time_to_resolution: issue.customfield_14777.dig('ongoingCycle', 'remainingTime', 'friendly')
else
  time_to_resolution: issue.customfield_10031.dig('ongoingCycle', 'remainingTime', 'friendly')
end

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

Вы не можете сделать это внутри га sh, но вы можете использовать Hash#merge для обновления ха sh.

def assigned_task_list
  assigned_tasks.map do |issue|
    {
      key: issue.key,
      name: issue.name
    }.merge(
      if issue.customfield_14777.present?
        {desired_time_to_resolution: ...}
      else
        {time_to_resolution: ...}
      end
    )
  end
end
0 голосов
/ 14 февраля 2020

Как я понимаю, ваш вопрос похож на следующий.

class C
  attr_reader :name, :is_k1, :k1, :k2, :v
  def initialize(name, is_k1, k1, k2, v)
    @name, @is_k1, @k1, @k2, @v = name, is_k1, k1, k2, v
  end
end

c1 = C.new("Bob", true, :a, :b, 1)
  #=> #<C:0x0000583742602eb8 @name="Bob", @is_k1=true, @k1=:a,
  #     @k2=:b, @v=1> 
c2 = C.new("Lois", false, :c, :d, 2)
  #=> #<C:0x0000583742612ac0 @name="Lois", @is_k1=false, @k1=:c,
  #     @k2=:d, @v=2> 

Мы хотим отобразить каждый экземпляр i ( c1 или c2) в га sh:

{ name: i.name, i.k1: i.v }

, если i.is_k1 #=> true, и в га sh

{ name: i.name, i.k2: i.v }

, если i.is_k1 #=> false. Мы могли бы просто написать:

[c1, c2].map { |i| { name: i.name, (i.is_k1 ? i.k1 : i.k2)=>i.v } }
  #=> [{:name=>"Bob", :a=>1}, {:name=>"Lois", :d=>2}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...