Добавочная стоимость в л oop га sh рельсы 5 - PullRequest
0 голосов
/ 02 марта 2020

У меня есть пустой ха sh @task_data = Hash.new({task_name: '', updated_at: '', worked_by: ''})

Теперь я хочу l oop вокруг переменной и добавить значение в ха sh @task_data примерно так:

 i = 1     
    @tasks.each do |task|             
      @task_data[i][:task_name] = task.task_name
      @task_data[i][:update_at] = task.updated_at.strftime("%d/%m/%Y")          
      if task.task_timings.present? && !task.task_timings.last.user_id.nil?
        @task_data[i][:worked_by] = task.task_timings.last.user.name
      else
        @task_data[i][:worked_by] = '' 
      end
      i = i+1
    end
  end

Но когда я отображаю значение после l oop, оно все равно остается пустым.

Мне нужно что-то вроде @task_data = {1 => {task_name: '', updated_at: '', worked_by: ''}, 2 => {task_name: '', updated_at: '', worked_by: ''}, 3 => {task_name: '', updated_at: '', worked_by: ''}}

Пожалуйста, помогите мне

Ответы [ 2 ]

2 голосов
/ 02 марта 2020

Ruby имеет функциональный стиль для более удобочитаемой записи (см. Enumerable#map), также вы можете использовать оператор безопасной навигации здесь:

@task_data = @tasks.map do |task|
  {
    task_name: task.task_name,
    update_at: task.updated_at.strftime("%d/%m/%Y"),
    worked_by: task.task_timings.last&.user&.name || ''
  }
end.each.with_index(1).to_h{|task,index| [index, task]}
0 голосов
/ 02 марта 2020
Hash[tasks.map.with_index(1) do |task, idx| 
  [idx, {task_name: task.task_name, updated_at: task.updated_at.strftime("%d/%m/%Y"), worked_by: task.task_timings.last.user.name}]
]
...