0
我有一個named_scope,它根據他們在特定時間段內做出的相關「grouptask」記錄數返回一些用戶(學生)記錄。從AR範圍結果中返回計算出的SQL列
學生模型:
class Student < ActiveRecord::Base
set_table_name "student"
set_primary_key :sid
has_many :usersessions, :foreign_key => "associatedstudentsid"
has_many :grouptasks, :through => :usersessions
named_scope :used_in_past, lambda {|days_ago| {
:conditions => ['(SELECT count(*) as total_tasks FROM grouptask WHERE creatorstudentid = sid AND creationdate > ?) > 0', Date.today-days_ago]
}}
end
Grouptask型號:
class Grouptask < ActiveRecord::Base
set_table_name "grouptask"
has_many :usersessions, :foreign_key => "associatedgrouptaskid"
has_many :students, :through => :usersessions
end
我想要做的是能夠從結果訪問上即時「total_tasks」欄中爲每個記錄,但只是做「student.total_tasks」沒有讓我在那裏,我猜,因爲該列沒有映射到實際的數據庫列,因爲它是在查找時構造的。那麼,如何在AR結果集中訪問這些類型的東西呢?
這個用例是一個包含學生姓名和創建任務總數的表格。現在我通過查找在過去X天內創建任務的用戶(通過在該時間段內查找total_tasks> 0)然後執行for-每個僅循環這些用戶並計算再次在這段時間內完成任務。這顯然導致大量的SQL調用不應該完成,因爲這些總數已經計算出來以便首先查找帳戶。
感謝您的任何幫助。
你能提供你的模型和關聯設置嗎?這個範圍在哪裏定義? – moritz
爲了清晰起見進行了編輯。 – John