我正在构建一个具有以下模型的 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)
但我无法自定义检索提要的第二个查询:
>> 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
inhas_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')
这可以与我的第一个查询合并吗?