Mam dwa modele: User i Account z relacjami między sobą has_many_and_belongs_to.
User posiada pole current_account_id, czyli obecnie aktywne konto firmy na którym pracuje.
W pasku nawigacji chcę pokazać nazwę aktualnie wybranej firmy, aktualnie w application_controller mam taki kod:
def current_account
# find account assigned to current_user
if current_user
Account.find current_user.current_account_id
end
end
Teraz przy każdym żądaniu jest wywoływana ta metoda i połączenie z bazą danych. Na pewno da się to zrobić lepiej, ale zastanawiam się w jaki sposób?
Dodam, że ta wartość może się zmienić w każdej chwili, kiedy User zmieni aktualnie wybraną firmę na inną.
Równie dobrze może zdarzyć się sytuacja, ze ktoś otworzy drugie okno przeglądarki i zmieni tam firmę, myśląc, ze w ten sposób będzie miał dwie niezależne sesje. Taka architektura to proszenie się o kłopoty, dlatego też do takich sytuacji stosuje się subdomeny.
Pierwszy przykład jaki przychodzi mi na myśl to NewRelic. U nich dokładnie masz coś takiego, że możesz mieć wiele “kont”. Rozwiązują to tak, że URLu zawsze masz id aktualnego “konta” na którym pracujesz https://rpm.newrelic.com/accounts/XXXX/applications.
W ten sposób masz rozwiązany problem o którym mówi @mdrozdziel - jeżeli ktoś chce pracować na dwóch kontach jednocześnie to proszę bardzo.