Poczytałem AR i zdecydowanie przy tym pozostanę. Jednak chciałbym się upewnić czy dobrze to rozumiem.
Mam 3 tabele:
przychodnia
oddzial
struktura
Każda przychodnia ma kilka oddziałów.
Tabela ‘struktura’ jest tabelą wiążącą obie te tabele. W niej przechowuje id_przychodnia i id_oddzial.
Mając id przychodni chcę zwrócić sobie id oddzialow należących do tej przychodni i wyświetlić nazwy tych oddziałów.
I o ile dobrze zrozumiałem powinienem skorzystać z ‘has_and_belongs_to_many’ czy raczej ‘has_many’?
I jak to potem zwrócić w kontrolerze?
gotar tak jak napisałeś właśnie przedtem robiłem i jest ok…zwróciłem sobie id wszystkich oddziałów, ale chciałbym właśnie teraz z tabeli ODDZIAL pobrać nazwy wszystkich oddziałów mających id takie jakie uzyskałem w sposób podany przez Ciebie…i tu jest problem?
a = []
s.each do |aaa|
a << Odzial.find(aaa.odzial_id).name
end
i w tablicy a masz wszytskie nazwy
jeśli to widok to możesz od razu wyświetlić zamiast przerzucać do tablicy drukujesz na wyjście i tyle.
Można by z tego oczywiście zrobić metodę pomocniczą, przerzucić do controllera co trzeba, ale jak nie chcesz się zagłębiać w ideologia, a chcesz b działało ci raz do projektu i zapomnieć to tak będze działać
Ale jak pisze Tjeden podejrzana jest ta tablica do złączenia. Na pewno nie jest to relacja wiele-wiele?
Może nie za pięknie, ale w najłatwiejszy dla zrozumienia sposób chyba
Właśnie sobie to przemyślałem…i rzeczywiście to jest bez sensu…bo idąc dalej…oddział ma kilka poradni i tutaj też mam tabele pośredniczącą która do niczego nie jest potrzebna…potem każda poradnia ma gabinety i tu jest tabela łącząca poradnie z gabinetami…przetrzymująca id_gabinetu i id_poradni…ponieważ w jednym gabinecie może być kilku lekarzy…przyjmujących o różnych porach…i tutaj tak samo wiem jak zwrócić id tych gabinetów tyle że muszę później zwrócić sobie nazwy tych gabinetów których id otrzymałem.
Nie zdążyłem przeczytać poprzedniego postu…dzięki o to mi chodziło…a tamte pośredniczące wywale i jakoś to wytłumacze bo rzeczywiście w tym sensu nie…bo tak jak mówiłem…np dany oddział może być tylko w jednej przychodni.
@michal_sz wygląda na to, że idziesz dobry tropem z tymi zmianami schematu bazy, szczególnie jeśli tabela struktura zawiera tylko kolumny przychodnia_id i oddzial_id. Powodzenia w bojach z prowadzącym! :)
Mam jeszcze pytanie…bo jakoś nie mogę nic znaleźć…czy jeśli chcę wywołać funkcję utworzoną w oraclu z poziomu rubiego to będzie to na tej samej zasadzie jak w przypadku tabel…to znaczy mogę użyć ‘find_by_sql’?
Przy utworzeniu modelu ‘wolne_godz_’ (funkcja nazywa się ‘wolne_godz_s’) i użyciu ‘find_by_sql’ wyrzuca mi taki błąd:
Expected ./app/models/wolne_godz_.rb to define Wolne_godz_
jak to powinienem zdefiniować?
PS. tjeden schemat bazy jak się okazuje zawierał trochę błędów…juz to poprawiłem pozbywając się między innymi tabeli struktura która nic nie wnosiła a wręcz utrudniała
hekto5 na agh…a z prowadzącym to myślę że jakoś się zrozumiemy;)
Nie za bardzo to rozumiem. A mając takie zapytanie w SQL
SELECT GAB_ID AS GABINET_ID, SWIAD_ID AS SWIADCZENIE_ID, TO_CHAR(GODZ, 'HH24:MI') AS GODZINA, GABINET_S.NAZWA AS GABINET, SWIADCZENIE_S.NAZWA AS SWIADCZENIE
FROM
TABLE (WOLNE_GODZ(session[:poradnia_id], session[:pracownik_id], TO_DATE('26-05-2010', 'DD-MM-YYYY'))),
GABINET_S,
SWIADCZENIE_S
WHERE
GABINET_S.ID = GAB_ID AND
SWIADCZENIE_S.ID = SWIAD_ID
jak to powinno wyglądać w RoR?
Bez odpowiedniego rzutowania Model-Tablica nic takiego nie uzyskasz w RoR z automatu, no przynajmniej mi nic do głowy nie przychodzi. Możesz to jedynie wpisać na sztywno, upraszczając, bo konwersje i wybór zrobisz po stronie aplikacji. Sam wole na bazę przerzucać co się da, ale Oracle nie znam więc nie pomogę.
Spróbuj tak
@result = ActiveRecord::Base.connection.execute("SELECT * FROM ... WHERE GABINET_S.ID = ? AND SWIADCZENIE_S.ID = ?", gab_id, swiad_id)
no i poźniej już mając obiekt @result robisz co tam chcesz
ale ten gem do Oracle co ci wynalazłem nic nie wnosi pomocniczego?