Rails: получение информации от ассоциации has_one, расположенной в отдельной базе данных - PullRequest
1 голос
/ 27 сентября 2019

У меня проблема с тем, что у меня есть 2 связанные модели, которые хранятся в отдельных базах данных на одном сервере.

Скажем, у меня есть две модели, City и SportsTeam.Я хочу быть в состоянии найти все спортивные команды, которые являются командами НФЛ, а затем получить связанные с ними города.Я столкнулся с большими проблемами, пытаясь сделать это, так как они расположены на отдельных БД.

class City
    eastablish_connection :city_db
    has_one :sports_team
end

class SportsTeam
    belongs_to :city
    validates :is_nfl_team, :is_mlb_team, :is_nhl_team, presence: true
end

1 Ответ

0 голосов
/ 28 сентября 2019

В Rails 5 это возможно, но я бы порекомендовал обновить ваше приложение до Rails 6, поскольку вы используете несколько баз данных, а Rails 6 изначально поддерживает эту функцию.

В Rails 5

  1. Вы можете определить другой файл конфигурации базы данных, например, second_database.yml внутри папки config, а затем загрузить его в инициализатор, например: SECOND_DATABASE = YAML::load(ERB.new(File.read(Rails.root.join('config','second_database.yml'))).result)[Rails.env]

  2. Затем внутри моделей (записи которых находятся во второй базе данных) включите это: establish_connection SECOND_DATABASE

Имейте в виду, что я работал с несколькими базами данных вRails 5, и вы можете столкнуться с проблемами, но то, что вы пытаетесь сделать, вполне выполнимо.

В Rails 6

Гораздо лучший вариант - перейти на Rails6 и использовать функцию множественных баз данных, в основном вам нужно сделать следующее:

  1. Определить соединение обеих баз данных внутри database.yml.
  2. Добавить connect_to(:database_one), connect_to(:database_two) и т. Д.. у моделей в зависимости от того, где их данные.

Более подробная информация по адресу: https://guides.rubyonrails.org/active_record_multiple_databases.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...