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
--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.
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
El mié, 21-04-2010 a las 04:10 -0700, DanC escribió:> 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
>
--
Juan José Vidal Agustín
ATICA - Sección de Telemática
Universidad de Murcia
Tlf: +34 868888742
Fax: +34 868888337
juanjova-mweRjIXS2Z8@public.gmane.org
--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.
On 21 April 2010 12:10, DanC <d.m.colegate-VlwAjOFxKoqFxr2TtlUqVg@public.gmane.org> wrote:> @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.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) -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Michael Pavling wrote:> On 21 April 2010 12:10, DanC <d.m.colegate-VlwAjOFxKoqFxr2TtlUqVg@public.gmane.org> wrote: >> @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. > > 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)You could also select it as an additional column (by getting it from the SQL count() function), although I don''t know how well ActiveRecord would deal with that. Best, -- Marnen Laibow-Koser http://www.marnen.org marnen-sbuyVjPbboAdnm+yROfE0A@public.gmane.org -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.