簡體   English   中英

在Rails中,如何按任務優先級對用戶進行排序

[英]In Rails, how do I sort users by priority of tasks

假設我有兩個類:User和Task。 任務屬於用戶並具有優先級(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

我想呈現具有最高任務數和最高優先級的前10名用戶(首先按高優先級排序然后按中等然后低則再評估未評估)。 我想到了一個不同的方式,但我找不到一個干凈的方式來處理這個。

我首先想到在控制器的方法中使用復雜的SQL請求來限制性能:

User.joins(:tasks).count(:all, :group => ["tasks.user_id", "priority"])

但是結果不容易排序,我最后必須使用兩個循環進行排序,另一個循環用於渲染用戶。 此外,我認為這種方法在模型中更具邏輯性。

你怎么看? 處理這個問題的最簡潔方法是什么?

你可以使用以下,試試這個:

User.select("users.id, count(tasks.id) as task_count").
joins(:tasks).group("users.id").order("task_count desc").first(10)

我認為這會奏效。 雖然沒有經過測試

如果我理解正確,您希望對具有最高優先級的任務數最多的用戶進行排序嗎? 所以在一個場景中:

  • 用戶A有3個任務,2個優先級為1,1個為3個
  • 用戶B有2個任務,2個優先級為3
  • 用戶C有1個優先級為2的任務

你期望輸出為:B,A,C?

我只想總結任務優先級並按順序排序:

User.joins(:tasks).group("users.id").order("SUM(tasks.priority) DESC").first(10)

SQL可能有點偏離,因為我正在寫這篇文章,但你希望得到這個想法。 這里的訣竅不是SQL,而是你用來排序的加權函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM