我有一个名为“tracking.json”的JSON文件。
[
{
"tracking_number": "IN175417577",
"status": "IN_TRANSIT",
"address": "237 Pentonville Road, N1 9NG"
},
{
"tracking_number": "IN175417578",
"status": "NOT_DISPATCHED",
"address": "Holly House, Dale Road, Coalbrookdale, TF8 7DT"
},
{
"tracking_number": "IN175417579",
"status": "DELIVERED",
"address": "Number 10 Downing Street, London, SW1A 2AA"
}
]
我在app.rb文件中写了一个函数:
def compare_content(tracking_number)
json_string = File.read("pages/tracking.json")
# Uses the JSON module to create an array from the JSON string
array_from_json = JSON.parse(json_string)
# Iterates through the array of hashes
array_from_json.each do |tracking_hash|
if tracking_number == tracking_hash["tracking_number"]
print "Package on its way"
else
print "Tracking Number does not exist"
end
end
end
页面的路线是:
get "/:tracking_number/status" do
@tracking_number = params[:tracking_number]
compare_content(@tracking_number)
erb :status
end
erb:状态页面是:
<h1>Status Pages: <%= @tracking_number %></h1>
<div>
<h3>Package is on its way</h3>
</div>
<a href="/"> Back to Index</a>
如果包与跟踪号匹配,如何显示状态?另外,如果不是,我怎么表明没有匹配?
答案 0 :(得分:1)
您的代码可以简化为:
require 'json'
JSON_DATA = JSON[<<EOT]
[
{
"tracking_number": "IN175417577",
"status": "IN_TRANSIT",
"address": "237 Pentonville Road, N1 9NG"
},
{
"tracking_number": "IN175417578",
"status": "NOT_DISPATCHED",
"address": "Holly House, Dale Road, Coalbrookdale, TF8 7DT"
},
{
"tracking_number": "IN175417579",
"status": "DELIVERED",
"address": "Number 10 Downing Street, London, SW1A 2AA"
}
]
EOT
def compare_content(tracking_number)
msg = if JSON_DATA.any? { |h| tracking_number == h['tracking_number'] }
"Package on its way"
else
"Tracking Number does not exist"
end
puts msg
end
compare_content('IN175417577')
compare_content('IN175417560')
# >> Package on its way
# >> Tracking Number does not exist
您可能需要考虑status
字段,以显示该套餐是否实际在运送中。
注意,我们很少在Ruby中使用print
。 puts
更聪明,知道何时添加尾随的“\ n”。 print
从不添加尾随换行符,因此您必须明确地这样做。这通常是一件好事,但通常会抓住puts
,并在您需要的极少数情况下将print
放在后袋中。