我有一个names.json
下面的json文件。当您将URL /list?name=Canada
或/list?name=CANADA
附加为大写或小写时,我想检查param[:name]
是否位于names.json
文件中,如果不存在则抛出错误。>
[
{
"id": 1,
"name": "Canada"
},
{
"id": 17,
"name": "Denmark"
},
{
"id": 23,
"name": "Austria"
}
]
这是我已经做过但没用的……。
控制器/问题
require 'json'
JSON_NAMES = 'names.json'.freeze
module NameFileLoader
class JsonLoader
def self.json_data_hash
file = File.read(JSON_NAMES)
JSON.parse(file)
end
end
end
name_controller.rb
def check_name_validity_in_file
data = NameFileLoader::JsonLoader.json_data_hash
name = data.each { |item| item['name'] } # The problem is here.
if name.include?(params[:name])
{ errorCode: 400, message: 'Name provided is not valid' }
end
end
答案 0 :(得分:2)
您最好首先缓存从文件中加载的JSON。另外,您可能希望保留一个允许小写的国家列表以进行比较。
module NameFileLoader
class JsonLoader
class << self
def json_data_hash
@json ||= JSON.parse(File.read(JSON_NAMES))
end
def countries
@countries ||= json_data_hash.map { |h| h['name'].downcase }
end
end
end
end
现在接收到参数后,您可以将其检查为:
if NameFileLoader::JsonLoader.countries.include?(params[:name].downcase)
...
end