Изменить значение только первого соответствующего объекта в массиве - PullRequest
0 голосов
/ 04 октября 2018

Я беру значения от пользователя, сохраняю их в объекте как свойства и сохраняю их в массиве.Массив состоит из следующих элементов:

[
  #<Tender:0x0000000001edc870 @company_name="a", @cost=20, @note="dfgv", @rejection_reason="", @status="open">,
  #<Tender:0x0000000001edb088 @company_name="b", @cost=15, @note="dfg", @rejection_reason="", @status="open">
]

У меня есть два метода: accept_tender и reject_tender.reject_tender магазины 'rejected' в @status.accept_tender магазины 'accepted' в @status.Вывод будет выглядеть примерно так:

Companies     Cost       Status      Reason for rejection 
AA            240000     rejected      cost is high 
BB            200000     accepted       
CC            230000     closed  

Третий статус будет изменен на 'closed' после вызова метода accept.Код для метода accept выглядит следующим образом:

def accept_tender
  project_data = find_project
  if project_data.nil?
    puts 'No such project'
  else
    minimum_cost = @tender_management.tenders.map { |tender| tender.cost }.min
    company_data = @tender_management.tenders.map { |tender| [tender.company_name, tender.cost] }.flatten!
    company_name = company_data [company_data.index(minimum_cost) - 1]
    puts "Selected tender is of cost #{minimum_cost} of company #{company_name}"
    update_status
    Menu.show_menu(self)
  end
end

def update_status
  @tender_management.tenders.find { |tender|
    tender.status = 'accepted' if tender.status == 'open'
  }
  @tender_management.tenders.find { |tender|
    tender.status = 'closed' if tender.status == 'open'
  }
end

Я использовал метод find, чтобы найти первый статус 'open', а затем изменил его на 'accepted'.Как только это будет сделано, все оставшиеся 'open' статусы должны быть изменены на 'closed'.Есть ли другой способ, кроме использования find?

1 Ответ

0 голосов
/ 05 октября 2018

Я нашел ответ на поставленный выше вопрос. Помимо find, можно также использовать метод detect, чтобы изменить только первое вхождение экземпляра в массиве.

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