Liczanie rekordów

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 :stuck_out_tongue:

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 :slight_smile: