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)

しかし、フィードを取得する 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_sqlhas_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