Я пытаюсь сделать простой низкоуровневый кэш API Google Translate в моем приложении rails, но кэширование работает неправильно:
1) Если cache_key = ['google_translate', 'first']
, переведенное содержание равно '第一' и является правильным.
2) Если cache_key = ['google_translate', 'second']
, переведенное содержание равно '第二', что является правильным.
3) Если снова cache_key = ['google_translate', 'first']
, переведенное содержание (пусто), когда я должен ожидать '第一'
Я могу подтвердить, что API был вызван во время первых двух запросов, и не был вызван (как ожидалось) в третьем запросе, хотя и был неправильным.
Вот мой код:
class Model < ApplicationRecord
def self.query_model(model_uid, text)
cache_key = [model_uid, text]
translate = Google::Cloud::Translate.new
Rails.cache.fetch(cache_key) do
translatedcontent = translate.translate text, from: 'en', to: "zh-cn"
end
return translatedcontent
end
end