Task、Milestone、Detail の 3 つのモデルがあります。タスクの履歴を記録するために、タスクまたはマイルストーンが変更されるたびに、ジャンクション (結合) テーブルに新しい詳細レコードが作成されます。
私の問題は、すべてのタスクに関する最新の情報を取得する連鎖可能なクエリを作成することです。.group の使用はしばらくの間うまくいきました:
@most_recent_details = Detail.order("updated_at DESC").group(:task_id)
しかし、特定のマイルストーンの存在を確認するなど、そのコレクションをさらにフィルタリングしようとすると、上記の並べ替えは無視され、コレクションに含まれていない古いレコードが返されます。
@most_recent_details.where(milestone_id: 2)
タスク
has_many :詳細
マイルストーン
has_many :詳細
詳細
所属先 :タスク
所属先 :milestone
attr_accessible :task_title, :task_id, :milestone_id
アップデート
この問題をさらに明確にするために、これが私がアプリケーションに効果的な方法で達成してもらいたいことです。
すべての MILESTONE のすべての TASK を検索します。そのタスクの対応する最新の DETAIL が、割り当てられたマイルストーンがないと述べていない場合。