Pracuję nad aplikacją, która umożliwia członkom wzięcie udziału w ankiecie (członek ma jeden do wielu relacji z odpowiedzią). Odpowiedź zawiera identyfikator member_id, question_id i ich odpowiedź.Szyny aktywne skojarzenie rekordów rekordów z "istniejącymi"
Ankieta została przesłana całkowicie lub w całości, więc jeśli w tabeli Odpowiedzi dla tego uczestnika są jakieś zapisy, wypełnili ankietę.
Moje pytanie brzmi, w jaki sposób mogę ponownie zapisać poniższe zapytanie, aby działało? W SQL byłby to najlepszy kandydat na słowo kluczowe EXISTS.
def surveys_completed
members.where(responses: !nil).count
end
Pierwsza opcja zawierała informację o tym wycofaniu http://pastebin.com/KbsNiqLy. Drugi zwrócił te same rekordy 68 razy, ponieważ ich 68 pytań zostało zmienionych w następujący sposób: members.joins (: odpowiedzi) .uniq.count – Lee
Nie można uniknąć powiadomienia o wycofaniu, ponieważ musimy wpisać ciąg znaków, aby mówi "IS NOT NULL" (nie można tego przetłumaczyć w czystym ActiveRecord, chyba że używasz Rails 4). Wstawię trzecią możliwość w sekundę @lee – MrYoshiji
Spojrzałem bardziej na ogłoszenie o odstąpieniu i zrobiłem to: members.includes (: odpowiedzi) .where ("responses.id NIE JEST NULL"). References (: odpowiedzi). liczyć i to też działa. Więc teraz jest pytanie, w którą stronę jest "najlepsza" droga. – Lee