У меня есть модель Rails под названием Tasks
, которая имеет только один атрибут: resource_id
. Это относится к идентификатору Resource
(другая модель) на другом сайте Rails, работающем по другому URL-адресу с другой базой данных.
Когда вы запрашиваете Resource
(например, http://localhost:3020/resources/23.json
), он возвращает ресурс в формате JSON, например:
{
"title": "Hello",
"description": "Lorem ipsum..."
}
Я хочу иметь возможность ссылаться на запрошенный ресурс на моем текущем веб-сайте Rails (с Task
) следующим образом:
# returns a Task with `resource_id: 23`
@task = Task.find(1)
# refers to the Resource from the other Rails server
@task.resource.title
Как я могу заставить Rails получать Resource
в то же время, когда он находит Task
из локальной базы данных?
Я попытался создать атрибут resource
в task.rb
, который запрашивает Resource
, когда он вызывается так:
require 'net/http'
class Task < ApplicationRecord
def resource
res = Net::HTTP.get(URI.parse('http://localhost:3020/resources/' + resource_id.to_s + '.json'))
JSON.parse(res)
end
end
Однако, это выполняется каждый раз Я звоню task.resource
, что очень медленно. Могу ли я просто запросить Resource
один раз и сохранить его локально в каком-то псевдоатрибуте (я не знаю, как он называется)?