47.11.3. Připojení tabulky z jiné databáze

47.11.3.1. Poznámky

Odkazy:

Pokud chceme připojit některé tabulky z jiné databáze, začneme od konfigurace připojení k databázi. Do souboru config/database.yml vložíme nové sekce pro produkční a vývojovou databázi. Aplikace k jejimž datům se chceme připojit je taktéž v RoR a jmenuje se bestapp. Její produkční databáze je bestapp_production a vývojářská databáze bestapp_development. Do konfiugrace si tedy přidáme dvě sekce:

bestapp_production:
  adapter: postgresql
  socket: /var/run/postgresql
  encoding: UTF8
  database: bestapp_production
  username: bestak
  password: jehoheslo

bestapp_development:
  adapter: postgresql
  socket: /var/run/postgresql
  encoding: UTF8
  database: bestapp_development
  username: vyvojar
  password: mojeheslo

Důležité je správné pojmenování sekcí, které nám zjednoduší kód. Vlastní databáze se mohou jmenovat jakkoliv. Snažím se ovšem zachovávat konvenci že se databáze jmenuje po aplikaci a má ke jménu doplněno development nebo production.

Máme tedy připravené konfigurace připojení k databázím. Pokročíme tedy k dalšímu kroku což je vytvoření abstrakní třídy pro připojení k těmto databázím. Já tuto třídu pojmenovávám po aplikaci ke které se připojuji. V našem případě to tedy bude Bestapp:

class Bestapp < ActiveRecord::Base
    self.abstract_class = true
    establish_connection "bestapp_#{RAILS_ENV}"
end

V příkazu pro připojení k databázi establish_connection jsme s výhodou využili konvenci v pojmenování konfigurací. Protože proměnná RAILS_ENV obsahuje reži ve které server běží (developlment/production), zajistí nám připojení k té správné databázi jak na vývojářském tak na produkčním serveru..

Nyní si již můžeme připojit vlastní datové tabulky:

class Clovek < Bestapp
    has_many :funkce
end

Jak jsem ukázal, můžeme navázat mezi tabulkymi v různých databázích i relační vztahy. Ale tady bych byl opatrný, protože není zajištěno že bude vše fungovat tak jako kdyby tabluky byly ve stejné databázi. V projektu který jsem psal mi k mé spokojenosti vztah has_many a belongs_to mezi databázemi fungoval k mé spokojenosti.

Licence Creative Commons
Tento dokument Ruby, jehož autorem je Radek Hnilica, podléhá licenci Creative Commons Uveďte autora-Nevyužívejte dílo komerčně-Zachovejte licenci 3.0 Česká republika .