次のモデルを持つ RSS リーダーを構築しています。
class Folder < ActiveRecord::Base
attr_accessible :name, :user_id, :is_expanded
has_many :feeds
end
class Feed < ActiveRecord::Base
attr_accessible :last_checked_date, :url, :name, :folder_id
has_many :items
has_many :subscriptions
end
class Item < ActiveRecord::Base
attr_accessible :description, :feed_id, :publication_date, :title, :url, :guid
belongs_to :feed
has_many :item_to_reads
end
class ItemToRead < ActiveRecord::Base
set_table_name "items_to_read"
attr_accessible :item_id, :user_id
belongs_to :item
end
そのため、フィードを含むフォルダーのリストがあり、フィードにはアイテムのリストを含めることができます。items_to_read
特定のユーザーに対して、各フィードのみを表示したいと思います。
次のようなリクエストを行う方法が見つかりません。
- 特定のユーザーのフォルダーと内部フィードのリストを取得します
items_to_read
各フィードのカウントを表示します- 可能であれば
items_to_read
、各フォルダーの合計も計算します (items_to_read
各サブフィードの合計)
ポイント 3 は後で (リクエストの外で) 行うことができます。
フォルダーとフィードの取得は簡単です。
Folder.includes(:feeds).where(:user_id => user_id)
しかし、フィードを取得する 2 番目のクエリをカスタマイズすることはできません。
>> Folder.includes(:feeds).where(:user_id => 1)
Folder Load (0.9ms) SELECT "folders".* FROM "folders" WHERE "folders"."user_id" = 1
Feed Load (0.2ms) SELECT "feeds".* FROM "feeds" WHERE "feeds"."folder_id" IN ('8')
での使用は私の問題に適合:finder_sql
しhas_many :feeds
ません。 では使用されませんincludes
。
私のオプションは何ですか?別のクエリでカウントを行う必要がありますか?
編集:items_to_read
フィードごと
の数のみを取得する別のクエリを見つけました:
Feed.group('feeds.id').joins(:items => :item_to_reads).where('items_to_read.user_id' => user_id).count('items_to_read.id')
これを最初のクエリとマージできますか?