2013-10-03 47 views
0

计数器缓存我有两个对象:订单在轨

TPLAN

class Tplan < ActiveRecord::Base 
    belongs_to :tplangroup, :counter_cache => true 
end 

Tplangroup

class Tplangroup < ActiveRecord::Base 
    has_many :tplans 
end 

我的柜台缓存作品和增量上tplangroups表中的列称为tplans_count罚款。如果我想:order => 'tplans_count desc',我会在哪里放置模型?

回答

0

你可以在你的模型创建默认范围像这样:

class Tplangroup < ActiveRecord::Base 
    has_many :tplans 
    default_scope order('tplans_count DESC') 
end 
+1

[避免default_scope(http://rails-bestpractices.com/posts/806-default_scope-is-evil)。 – Zabba

+0

@Zabba:我不同意。当然,如果你在你的代码中做了一些事情,你希望它能按照它应该的那样工作。如果你不记得你创建了一个'default_scope',那么是的,不要使用它。 – Raindal

+0

好吧,但是如何在这里创建一个'default_scope'?如果订单希望成为'ASC',你将会拥有:'Tplangroup.unscoped.order('tplans_count ASC')'。 而且你可能会使用'unscoped'作为你可能需要的其他范围。 [还有一个原因](http://pragdave.blogs.pragprog.com/pragdave/2012/03/be-careful-using-default_scope-and-order.html)。 – Zabba