2013-10-03 80 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