我正在构建一个具有以下模型的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
所以我有一个文件夹列表,其中包含Feed,而这些文件又可以包含一个项目列表。对于给定用户,我只想为每个Feed显示items_to_read
。
我找不到任何方式提出请求:
items_to_read
计数items_to_read
的总和(每个子Feed的items_to_read
的总和)第3点可以在以后完成(在请求之外)。
轻松检索文件夹和Feed:
Folder.includes(:feeds).where(:user_id => user_id)
但我无法自定义检索Feed的第二个查询:
>> 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
中使用。
我有什么选择?我应该在另一个查询中进行计数吗?
修改
我找到了一个单独的查询,只检索每个Feed 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')
这可以与我的第一个查询合并吗?