Sorting posts

Hi,

I have a topic model which has_many replies.

On my topic index page I would like to be able to sort the topics by
the number of replies.

In my topic model I have defined

Topic.rb
...
has_many :replies
....
  def total_replies
    replies.count
  end
....

And in my controller I have tried

@topics = Topic.find(:all, :conditions => ["forum_id = ?",
@forum.id], :order => "total_replies DESC")

but I get the error Mcolumn "total_replies" does not exist

I know the column doesn't exist, but the question is, how can I get
the 'total_replies' to behave as a column.

Thanks,

Dan

I think that's you could use the counter_cache feature:

class AddReplyCount < ActiveRecord::Migration
  def self.up
    add_column :topics, :replies_count, :integer, :default => 0
    Project.reset_column_information
    Topic.find(:all).each do |t|
      t.update_attribute(:replies_count, t.replies.length)
    end
  end

  def self.down
    remove_column :topics, :replies_count
  end
end

class Topic < AR
  has_many :replies, :order => 'replies_count ASC'
  ...
end

class Reply < AR
  belongs_to :topic, :counter_cache => true
  ...
end

You can't - it's a method on a model, and the DB knows nothing about it.
But you can add a column that keeps the value of associated replies
and then the query will work. Rails will do this for you with a
"counter_cache".

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html
(I'm still getting the hijacked domain, so I hope that's the right link)

Michael Pavling wrote: