私は特定の期間に行った関連する「grouptask」レコードの数に基づいてユーザ(学生)レコードを返すnamed_scopeを持っています。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"を実行しても私の所には届かないのですが、その列はルックアップ時に構築されているため実際のdb列にはマップされないためです。だから、どのようにAR結果セットでこれらの種類のものにアクセスするのですか?
このユースケースは、生徒の名前と作成されたタスクの合計数を含む表です。今私は、過去のX日数(その期間にtotal_tasks> 0を見つけて)でタスクを作成したユーザーを見つけて、それらのユーザーをループさせるfor-eachを実行し、その期間のタスクを再度実行します。明らかに、最初にアカウントを見つけるために合計が計算されているので、実行する必要のない多くのSQL呼び出しが発生します。
ありがとうございました。
モデルとアソシエーションの設定を指定できますか?このスコープはどこに定義されていますか? – moritz
明瞭にするために編集されています。 – John