Mam trzy modele: Użytkownik, Komentarz i Awans. User-to-Comment ma relację jeden-do-wielu, Comment-to-Upvote ma relację jeden-do-wielu, a User-to-Upvote ma relację jeden-do-wielu.Zapobieganie pobraniu modelu z każdego komentarza
Chcę zrobić coś podobnego do upvotingu na Stackoverflow. Kiedy więc awansujesz/pójdziesz w dół, strzałka będzie podświetlać i pozostanie wyróżniona, nawet jeśli odświeżysz stronę lub powrócisz na stronę dni/tygodnie później.
Obecnie robie to:
<% if Upvote.voted?(@user.id, comment.id) %>
<%= link_to '^', ... style: 'color: orange;'%>
<% else %>
<%= link_to '^', ... style: 'color:black;'%>
<% end %>
gdzie metoda voted?
wygląda następująco:
def self.voted?(user_id, comment_id)
find_by(comment_id: comment_id, user_id: user_id).present?
end
Więc jeśli mam 10 komentarzy na stronie, to będzie załadować upvote z mojej bazy danych 10 razy, żeby sprawdzić, czy istnieje!
Musi być lepszy sposób na zrobienie tego, ale myślę, że mój mózg przestał działać, więc nie mogę myśleć o żadnym.
Prawdopodobnie nie powinno być wywołanie głosował na 'upvote 'klasa. Jeśli myślisz o akcji głosowania, nie jest to coś, co robi "komentarz", ale raczej "użytkownik". Chciałbym przenieść tę metodę do klasy 'User'. – kobaltz
Na marginesie, zamiast robić 'find_by(). Present?', Może lepiej byłoby zrobić 'exists?()' –