1

我正在构建一个具有以下模型的 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_sqlinhas_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')

这可以与我的第一个查询合并吗?

4

0 回答 0