chce wyświetlić ilość komentarzy pod wpisem.
coś takiego mam, może ktoś poprawić ?
@count = Comment.count(:conditions => "post_id = (params[:id])")
chce wyświetlić ilość komentarzy pod wpisem.
coś takiego mam, może ktoś poprawić ?
@count = Comment.count(:conditions => "post_id = (params[:id])")
Żle:
@count = Comment.count(:conditions => "post_id = (params[:id])")
dobrze:
@count = Comment.count(:conditions => ["post_id = ?", params[:id]])
ale może lepiej:
@count = Post.find(params[:id]).comments.count
Ja tylko dodam, że używanie hasha albo tablicy przy :conditions jest związane z SQL injection: http://guides.rubyonrails.org/security.html#sql-injection
no tak wiec teraz jest ok jeżeli jest przekazywany id to się zliczą rekordy, tylko właściwie to raczej powinno się wyświetlać liczbę komentarzy nie pod postem z komentarzami, ale na liście postów - tylko w tym wypadku komentarze wyświetlają się z pętli i nie jest przekazywany id wiec, gdzie zrobić trzeba to zliczanie ?
mozesz sobie w widoku dac
@posts.count
czy co colwiek takiego
count mozesz na wszystkim prawie zapodac, zasade chyba kumasz?
ale duzo madrzej jest napisac sobie krotka funkcje, czy jak to w ruby nazywaja
def comment_count(id)
@c = Comments.find(:conditions => [“post_id = ?”,id]);
return @c.count
end
pisane z palca i glowy, no ale powinno dzialac jakos tak
chodz ja zawsze wole na posiomie sql rozwiazania juz, wiec daje
SELECT COUNT(1) FROM comments WHERE post_id = id;
i tyle
Na liście postów masz coś postaci @posts, a wypisujesz je przy pomocy:
<%= render :partial => "post", :collection => @posts %>
lub:
@posts.each do |post|
...
end
Tak czy owak w każdym przejściu pętli masz dostęp do pojedynczego posta (zmienna lokalna post). Wtedy robisz identycznie jak napisał Hubert:
post.comments.count
W takiej sytuacji możesz się też zainteresować tematem counter_cache.
Nie potrzebujesz dodatkowych metod (vide propozycja gotara).
dzięki super, jak już wiem jak to wygląda że proste