Mam listę obiektów "żądań", z których każda ma dość normalne właściwości aktywnego rekordu. Tabela żądań jest powiązana z tabelą gier z tabelą łączenia, "games_requests", więc żądanie ma tablicę request.games.Szyny: Jak znaleźć() wszystkie rekordy unikatowe w niektórych polach?
Pytanie brzmi, czy istnieje sposób na znalezienie znaleziska dla ostatnich n unikatowych żądań, gdzie unikalność jest definiowana przez kolumnę gier i kilka innych, ale w szczególności ignoruje inne kolumny (takie jak nazwa żądającego użytkownika?)
Widziałem składnię typu "find (: all,: limit => 5,: include => [: games,: stage])", ale to zwracało duplikaty.
Dzięki ...
EDIT: Dzięki chaosu na wielkie odpowiedzi. Bardzo mnie to zbliżyło, ale nadal potrzebuję, aby zwracane obiekty były prawidłowymi obiektami żądania: pierwszych 5 rekordów, które są odrębne w żądanych wierszach. Mogę po prostu użyć znaleziska podczas jego tworzenia, a następnie zrobić drugie znalezisko dla pierwszego wiersza w tabeli, który pasuje do każdego zestawu zwróconego przez pierwsze znalezisko.
EDIT:
Games.find(
:all, :limit => 5,
:include => [:games, :requests],
:group => 'games, whatever, whatever_else'
)
... daje błąd SQL:
Mysql::Error: Unknown column 'games' in 'group statement': SELECT * FROM `games` GROUP BY games
Zrobiłem kilka zmian do tego, co przyjmuje się za prawidłowe dla mojego projektu; uzyskanie listy zgłoszeń zamiast gier, itp .:
Request.find(
:all, :order=>"id DESC", :limit=>5,
:include=>[:games], #including requests here generates an sql error
:group=>'games, etc' #mysql error: games isn't an attribute of requests
:conditions=>'etc'
)
Myślę, że będę musiał użyć opcji: join => tutaj.
to powrót gry, cokolwiek i whatever_else kolumn. Czy istnieje sposób zwracania kompletnych obiektów żądań, wysuwając tylko te, które nie spełniają wyjątkowości w tych kolumnach? – Sniggerfardimungus
Tak. Edytowano za. – chaos
Hrm. Występuje problem z "grami" będącymi atrybutem wirtualnym za pośrednictwem tabeli dołączania. (patrz edytowane pytanie) – Sniggerfardimungus