带条件轨的复杂三重连接

时间:2012-07-13 08:12:08

标签: ruby-on-rails ruby-on-rails-3 activerecord model

我对rails非常陌生,但看到我的进展感觉很好,但是我面对的是第一个真正的复杂模型问题:/

以下是我的模型的样子:

class Top < ActiveRecord::Base
  has_many :line_tops, :dependent => :destroy
  has_many :ideas, :through => :line_tops
  has_many :top_subscriptions
  has_many :users, :through => :top_subscriptions

class User < ActiveRecord::Base
  has_many :top_suscribtions
  has_many :tops, :through => :top_suscribtions
  has_many :idea_suscribtions
  has_many :ideas, :through => :idea_suscribtions

class IdeaSubscription < ActiveRecord::Base
  belongs_to :idea
  belongs_to :user
  attr_accessible :idea, :user, :done (is a boolean)

我想检索一个顶级,所有已经完成此顶部所有想法(done = true)的用户。 我很失落,因为我真的不知道该怎么办。顶级模型或方法中的新属性?我可以使用活动记录查询界面或我应该使用纯SQL吗? 实现这一目标的“最佳”方式是什么?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

应该是这样的:

top = Top.find(top_id)
top.users.includes(:idea_subscriptions).where("idea_subscriptions.done = true")