tworzymy w bazie konta, poprzez ktore nastepuje system autoryzacji; typowa sytuacja, pola: id, login, haslo, osoba_id
tworzymy w bazie tabele osob, zakladam ze tylko czesc z osob ma tworzone konta (do celow administracyjnych); znowu typowo, pola: id, imie, nazwisko, email
tworzymy wszechpotezny i piekny backend, gdzie m.in. tworzymy liste kont; jednak nie chcemy ich listowac “po loginach”, lecz po imionach i/lub nazwiskach osob z kontami powiazanymi
Problem:
szukam sposobu na pobranie z bazy lsty kont posortowanych po imionach osob
chcialbym to zrobic poprzez operacje na modelu, bez uzywania sql-a i funkcji find_by_sql
chcialbym takze uniknac zbednego obciazania serwera sortowaniem tablicy
chcialbym to zrobic poprzez operacje na modelu, bez uzywania sql-a i funkcji find_by_sql
Mozesz zrobic tak
Konto.find(:first, :order => “imie”)
O to chodzi ?
Co i tak sprowadza sie do SQL. Po prostu musisz sie odwolac do bazy.
Chodzi o sytuacje gdy masz relacje np. Person i Account i chodzi o to aby some_person.accounts potrafilo raz zwrocic liste kont posortowanych wg jedengo pola a drugi raz wg innego.
Dodam, ze nie chodzi o mnozenie relacji a o jakies w miare dynamiczne rozwiazanie.
[quote=balcer]Mozesz zrobic tak
Konto.find(:first, :order => “imie”)[/quote]
No wlasnie ze nie moge
Sytuacja wyglada dokladnie tak, ze Account i Person to dwie klasy ActiveRecord (tabele)
Zachodzi miedzy nimi relacja Account.person = Person.find(id)
Teraz gdy pobieram z bazy liste kont accounts = Account.find(:all) chcialbym ja otrzymac posortowana po atrybutach klasy Person, czyli np. Person.first_name
Jedyny sposob jaki przychodzi mi do glowy to accounts = Account.find_by_sql( i tu join i sortowanie po polach Person )
Jednak tak jak pisalem wyzej chcialbym tego uniknac, zrobic to w sposob ktorego idea sprowadza sie do; Account.find(:first, :order => Accoumt.person.first_name ) - jednak nie jest to tak banalne i sprawia mi problemy
[quote=Marcin][quote=balcer]Mozesz zrobic tak
…
Jednak tak jak pisalem wyzej chcialbym tego uniknac, zrobic to w sposob ktorego idea sprowadza sie do; Account.find(:first, :order => Accoumt.person.first_name ) - jednak nie jest to tak banalne i sprawia mi problemy :)[/quote]
Mozesz to zrobic tak:
(jesli masz zdefiniowana relacje has_one, albo has_many na account i person)
[quote=hosiawak]Mozesz to zrobic tak:
(jesli masz zdefiniowana relacje has_one, albo has_many na account i person)
Account.find(:first, :include=>:person, :order=>‘people.first_name’)[/quote]
hosiawak jestes wielki
mam nadzieje ze bedzie to chodzic, o taka elegancje wlasnie mi chodzi
jak bede mial chwilke zeby powrocic do tamtego projektu to sprawdze na pewno
Mozesz to zrobic tak:
(jesli masz zdefiniowana relacje has_one, albo has_many na account i person)
Account.find(:first, :include=>:person, :order=>'people.first_name')[/quote]
Idealnie tego szukałem :)bardzo elegancka linijeczka.
Dzięki wielkie.