Witam.
Głowię się jak dać zapytanie, aby w tabeli we frontend podał w jednej linii wartości z kilku id’kow.
- @results.each do |result|
%tr.item{"data-item-id" => result.id, "data-id" => result.id, :id => "tr_#{result.id}"}
- if @project.players.find(result.player_id).presence
%td= @project.players.find(result.player_id).fullname
- @project.results.where(:player_id => result.player_id).each do |playerresult| # <- problem, bo działa, lecz kod powyżej znowu powtórzy operacje, bo nie uwzględni, że player_id o takim id już został narysowany w tabeli
%td
= best_in_place [@project, playerresult], :result, :type => :input
= best_in_place [@project, playerresult], :resultok, :type => :checkbox
Tabela:
id, player_id, result, resultok
1, 12, 110, t
2, 12, 120, f
3, 12, 125, t
Problem polega na tym, że gdy tabela zostanie narysowana, to zgodnie z oczekiwaniami poda mi 3 linie w tabeli. Ja chcę natomiast, aby z takiej bazy danych narysowało mi dla player_id=12, w jednej linii te trzy wartości, ale żeby w pętli @results.each nie powtarzało dla kolejnych, które już zostały uprzednio narysowane. Da radę to jakoś optymalnie zrobić ? Mam nadzieję, że za bardzo nie pokręciłem.
Z góry dziękuję za pomoc i pozdrawiam
Chcesz pogrupować dane po player_id, problemem jest jedynie wybór funkcji agregującej dla pozostałych kolumn.
Jeśli interesują Cię wszystkie wartości (a nie np max, min, bool_or dla danej kolumny), to raczej nie obędzie się bez hackowania. Jeśli używasz postgresa (>9.3), to prawdopodobnie dałoby się te wartości przepchnąć jsonem. Jeśli mysql, to chyba tylko rzutowanie na stringi i konkatenacja jakimś sensownym delimiterem.