Я беру значения от пользователя, сохраняю их в объекте как свойства и сохраняю их в массиве.Массив состоит из следующих элементов:
[
#<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
?