如何检查params是否在json文件中,如果不抛出错误响应?

时间:2019-06-07 05:44:33

标签: ruby-on-rails ruby

我有一个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

1 个答案:

答案 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