我从用户处获取值,将其作为属性存储在对象中,并将其存储在数组中。该数组包含以下内容:
[
#<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
以外,还有其他方法吗?
答案 0 :(得分:0)
我找到了上述问题的答案。除了find
之外,还可以使用detect
方法仅更改实例在数组中的首次出现。