I’m working on a simple cookbook app, and users can leave comments. I’d
like to show the number of comments for each recipe in the list of
recipes. So far I can only get the count to show the total number of
comments in the comments database; I can’t figure out how to get it to
read the recipe_id column in the comments field so it only spits out the
number of comments that relates to each recipe_id.
Here’s what I have so far:
recipes_controller.rb:
def comment_count
Comment.count
end
helper_method :comment_count
list.rhtml
<% for recipe in @recipes %>
<%= recipe.title %>
<%= comment_count %>
<% end %>
Thanks!!
Dave A. wrote:
I’m working on a simple cookbook app, and users can leave comments. I’d
like to show the number of comments for each recipe in the list of
recipes. So far I can only get the count to show the total number of
comments in the comments database; I can’t figure out how to get it to
read the recipe_id column in the comments field so it only spits out the
number of comments that relates to each recipe_id.
See
http://api.rubyonrails.org/classes/ActiveRecord/Calculations/ClassMethods.html
There’s a bunch of documentation on the parameters and conditions count
can accept.
A.
recipe.comments.count
You can pass additonal conditions into that, so you could for example do
recipe.comments.count :conditions => [‘validated = ?’, true]
To only show comments that have been validated, if you had a system
where comments were not visible until approved.
Fred
def comment_count
Comment.count(:conditions => "recipe_id = " + self.id.to_s)
end
Might not be the best solution, but it should work (you can read about
that in the API reference, just search for ‘count’ and
‘ActiveRecord::Calculations’).
Christoph
Kitto wrote:
def comment_count
Comment.count(:conditions => "recipe_id = " + self.id.to_s)
end
Might not be the best solution, but it should work (you can read about
that in the API reference, just search for ‘count’ and
‘ActiveRecord::Calculations’).
Christoph
Hi, I tried this solution, and I got an error that said:
Mysql::Error: #42S22Unknown column ‘conditionsrecipe_id’
It seems like it’s combining :conditions and recipe_id when it’s
SELECTing from the database. Is there a weird syntax thing going on?
I tried the solution above:
recipe.comments.count
but I got an error: undefined local variable or method `recipe’
I tried it with Recipe capitalized and got: undefined method `comments’
I know that Recipes and Comments are wired together correctly, because
when I post a comment it enters the correct recipe_id. I just don’t
know why this simple counting thing doesn’t work. The resources about
count were helpful, though, and I guess I’ll keep trying things.
Frederick C. wrote:
I tried the solution above:
recipe.comments.count
but I got an error: undefined local variable or method `recipe’
well you just didn’t have a recipe variable available at the time. If
you still sticking this in your comment_count helper then that makes
perfect sense, as you are not supplying it with a recipe object.
personally I wouldn’t bother with the helper and would just have
<% for recipe in @recipes %>
<%= recipe.title %>
<%= recipe.comments.count %>
<% end %>
Fred
Yes, thank you, that was the solution I was looking for. I don’t know
why I insisted on the helper.
I tried the solution above:
recipe.comments.count
but I got an error: undefined local variable or method `recipe’
well you just didn’t have a recipe variable available at the time. If
you still sticking this in your comment_count helper then that makes
perfect sense, as you are not supplying it with a recipe object.
personally I wouldn’t bother with the helper and would just have
<% for recipe in @recipes %>
<%= recipe.title %>
<%= recipe.comments.count %>
<% end %>
Fred