Rails渴望加载自定义查询

时间:2013-03-18 21:55:51

标签: ruby-on-rails-3 activerecord eager-loading

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

我找不到任何方式提出请求:

  • 检索给定用户的文件夹和内部供稿列表
  • 显示每个Feed的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')

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

0 个答案:

没有答案