假设我有两个类:用户和任务。一个任务属于一个用户并且有一个优先级(它是一个介于 1 和 3 之间的整数,或者 nil)。
class User < ActiveRecord::Base
has_many :tasks
class Task < ActiveRecord::Base
belongs_to :user
attr_accessible :priority # Integer between 1 and 3, or nil
我想展示任务数量最多且优先级最高的 TOP 10 用户(首先按高优先级排序,然后是中等优先级,然后是低优先级,然后未评估)。我想到了一种不同的方法,但我找不到一种干净的方法来处理这个问题。
我首先想到的是在控制器的方法中使用复杂的 SQL 请求来限制性能:
User.joins(:tasks).count(:all, :group => ["tasks.user_id", "priority"])
但是结果不容易排序,我最终不得不使用两个循环进行排序,另一个循环来呈现用户。此外,我认为这种方法在模型中会更合乎逻辑。
你怎么看?处理这个最干净的方法是什么?