zaiste napotkałem problem w momencie kiedy chciałem zrobić jednego dużego joina i bynajmniej tu nie chodziło o ilość a warunki łączenia. Proszę więc o pomoc.
Jeżeli zrobię np:
@users = User.find(:all, :joins => 'books')
Oczywiste jest, że rails połączy tabele na zasadzie books.user_id = users.id
Teraz załóżmy, że tabela ‘users’ ma pole ‘profile_id’, a tabela ‘books’ ma pole ‘page_id’. Pytanie - jak za pomocą railsów(nie używając czystego kodu sql) połączyć tabele aby ‘users.profile_id = books.page_id’, czyli jednym słowem zdefiniować swój warunek łączenia. W czystym kodzie sql wyglądało by to tak:
SELECT `users`.* FROM `users` LEFT OUTER JOIN books ON books.page_id = users.profile_id
Jest to wykonalne? Czy może ja kompletnie źle rozumuje i powinno się takie rzeczy robić w inny sposób?
Dodatkowo też muszę połączyć ze sobą 5 tabel. Proszę podpowiedzieć jak miała by wtedy wyglądać składnia dla więcej niż jednego joina(i zdefiniowanego dla kazdego joina warunku).
Ps. Cały czas mam wrażenie, że w ogolę jakoś źle rozumuje w tym temacie i szukam daremnie rozwiązania…
end[/code]
User.all( :joins => :books ) wygeneruje takie zapytanie jak chcesz. Prawie… zamiast OUTER JOIN będzie INNER JOIN. Jeśli faktycznie potrzebujesz outer joina, musisz napisać kod w czystym sqlu.