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.