Как проверить, есть ли params в файле json, а если нет, выдать ошибку? - PullRequest
0 голосов
/ 07 июня 2019

У меня есть файл json, как показано ниже names.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 Ответ

2 голосов
/ 07 июня 2019

Вам лучше сначала кешировать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...