How to implement a Counter Cache in Rails?
Posted
by yuval
on Stack Overflow
See other posts from Stack Overflow
or by yuval
Published on 2010-06-02T07:43:59Z
Indexed on
2010/06/02
8:03 UTC
Read the original article
Hit count: 412
I have a posts controller and a comments controller. Post has many comments, and comments belong to Post. The associate is set up with the counter_cache option turned on as such:
#Inside post.rb
has_many :comments
#Inside comment.rb
belongs_to :post, :counter_cache => true
I have a comments_count
column in my posts
table that is defaulted to zero, as such:
add_column :posts, :comments_count, :integer, :default => 0
In the create
action of my comments controller, I have the following code:
def create
@posts = Post.find(params[:post_id])
@comment = @post.comments.build(params[:comment])
if @comment.save
redirect_to root
else
render :action => 'new'
end
end
My problem: when @comment.save
is called, I get the following error:
ArgumentError in CommentsController#create
wrong number of arguments (2 for 0)
Removing :counter_cache => true
from comment.rb completely solves the problem, so I'm assuming that it is the cause of this vague error. What am I missing here?
How can I save my comment and still have rails take care of my counter_cache for my post?
Thanks!
© Stack Overflow or respective owner