2013-01-15 60 views
0

我有一个Library,一个Library有很多Book s。Rails根据关联计数的默认范围排序

class Library < ActiveRecord::Base 
    has_many :book_collectings 
    has_many :books, through: :book_collectings 

如何使用default_scope使Library.all是基于图书Library具有数量排序? (还是有不同的做法?)

回答

2

我将与此接受的答案的建议,同意给予:

Overriding a Rails default_scope

避免违约的范围,如果在所有可能的。即使你仅仅使用了一个范围,为了保持高性能,我认为你必须编写一些可能会很痛苦并且可能不便携的SQL。我建议考虑一个计数器缓存列。下面是相应的导轨导向参考:

http://guides.rubyonrails.org/association_basics.html#belongs_to-counter_cache

你需要创建一个迁移。看到这个答案的一些示例代码:

https://stackoverflow.com/a/1794235/149156

创建列后,您就可以创建一个范围或类方法经书数列订购。

+0

同意default_scope几乎总是最终变得邪恶。 – 99miles

+0

设置counter_cache并让它工作。万分感谢 :) – wyclin