Czy istnieje jakas railsowa metoda, która pozwolilaby mi znalesc wszystkie rekordy gdzie jeden z warunkow moze przyjmowac rozne wartosci ?
chodzi mi o wyszukanie dla takiego np. zapytania: ‘SELECT * from articles WHERE category_id = 1 OR category_id = 2 OR category_id=3’ ?
Aha, przyjmijmy ze id kategorii sa w tablicy o nieznanym rozmiarze
Obczaj find w api railsów.
Category.find([1,2,3]).
Jeżeli tablica zawiera tablice, albo nile to też za bardzo nie musisz się martwić, bo jak spojrzysz do źródeł, to zobaczysz taką konstrukcję:
ids = ids.flatten.compact.uniq
[quote=balinski]Czy istnieje jakas railsowa metoda, która pozwolilaby mi znalesc wszystkie rekordy gdzie jeden z warunkow moze przyjmowac rozne wartosci ?
chodzi mi o wyszukanie dla takiego np. zapytania: ‘SELECT * from articles WHERE category_id = 1 OR category_id = 2 OR category_id=3’ ?
Aha, przyjmijmy ze id kategorii sa w tablicy o nieznanym rozmiarze[/quote]
ids = [1, 2, 3]
articles = Article.find( :all,
:conditions => "category_id IN (#{ids.join( ', ' )})" )
Ale po co takie konstrukcje dziwne 
Nie lepiej skorzystać z asocjacji i z tego co napisałem powyżej?
ids = [1, 2, 3]
articles = category.articles.find(ids)
Dla mnie to ładniej wygląda 
[quote=drogus]Nie lepiej skorzystać z asocjacji i z tego co napisałem powyżej?
ids = [1, 2, 3]
articles = category.articles.find(ids)
[/quote]
Owszem, Twoje rozwiązania wyglądają o niebo ładniej, ale chyba rozwiązują troszkę inny problem.
Pierwsze daje listę kategorii. Drugie daje listę artykułów z jednej, określonej kategorii. Tymczasem pytanie było o listę artykułów z wielu kategorii.
Można oczywiście połączyć Twoje rozwiązania: wziąć listę kategorii, a następnie dla każdej kategorii listę artykułów - ale w zaprezentowanej formie poskutkowałoby to niepotrzebnie dużą liczbą żądań do bazy.
No chyba, że czegoś nie zaczaiłem?
Natomiast bardzo podoba mi się Twoja uwaga o spłaszczeniu, wyczyszczeniu i “zunikalnieniu” listy id:
ids = ids.flatten.compact.uniq
To jest akurat tak jak mówiłem kawałek z którejś z metod wywoływanych przez find. Więc podziękowania dla rails core team ![]()
[quote]Owszem, Twoje rozwiązania wyglądają o niebo ładniej, ale chyba rozwiązują troszkę inny problem.
Pierwsze daje listę kategorii. Drugie daje listę artykułów z jednej, określonej kategorii. Tymczasem pytanie było o listę artykułów z wielu kategorii.[/quote]
Rzeczywiście, nastawiłem się na jeden tor myślenia i tak już zostało do końca. ![]()
Jak wrócę do domu to sprawdzę, ale chyba jest to do wykonania w jednym zapytaniu bez uciekania się do sql’a. Pytanie tylko czy warto ![]()
Tak jak myślałem można zrobić to bardzo prosto ![]()
Generuje to analogiczne do podanego wyżej zapytanie:
A na deser fajny sposób na podpatrzenie jakie zapytania się właściwie wykonają. Dużo wygodniejsze od śledzenia logów - konsola railsowa to wspaniały wynalazek ![]()
Świetne rozwiązanie! Teraz wydaje się oczywiste ![]()
Wygląda ładnie, ale niektórzy twierdzą, że używanie find_by i find_all_by jest wolne, bo jest wywoływane z użyciem method_missing. Jak na razie nie zauważyłem nic co na to by wskazywało, więc nie wiem jak się do tego ustosunkować. Sam używam często gęsto, bo znacznie upraszcza kod ![]()