Ruby on rails 嵌套查询的子集

Ruby on rails 嵌套查询的子集,ruby-on-rails,Ruby On Rails,我甚至不太确定要搜索什么来解决这个特定的问题。 所以这里是 我目前的设计: User < AR has_many :items has_many :projects Project < AR has_many :groups Group < AR has_many :items 我想你要找的有很多:通过: class User < ActiveRecord::Base has_many :projects has_many :groups,

我甚至不太确定要搜索什么来解决这个特定的问题。 所以这里是

我目前的设计:

User < AR
  has_many :items
  has_many :projects

Project < AR
  has_many :groups

Group < AR
  has_many :items

我想你要找的有很多:通过:

class User < ActiveRecord::Base
  has_many :projects
  has_many :groups, :through => :projects
  has_many :items, :through => :groups
end

class Project < ActiveRecord::Base
  has_many :groups
end

class Group < ActiveRecord::Base
  has_many :items
end
获取给定用户的所有项目


请注意,nested有很多:自Rails 3.1以来,仅通过工作;否则,您可能必须编写一个方法

这有一点原始SQL,但应该可以:

def Project
  def groups_for_user u
    self.groups.select("DISTINCT groups.*").join(:items).where("items.user_id = ?,u.id)
  end
end

之所以使用
“不同的组。*”
是为了防止结果重复,因为您要加入较低级别的
项目表。

一个
组是否可以属于多个项目?您的问题暗示了这一点,但您的模型设计没有。您希望所有包含项目所有者或任何给定用户项目的组吗?@Kandaboggu组不能属于多个项目。@BrianGlick我希望所有组都属于给定项目,并且我希望这些组只包含给定用户的项目。项目可以属于哪个用户多用户?如果一个项目只属于一个用户,那么@Kyle的答案就足够了。这实际上是我现在拥有的,但我希望仍然获得组集合,并且这些组只包含与给定用户关联的项,而不是组通常包含的所有项。我想我可以迭代@project.groups并重新填充每个组的项目集合,但似乎有更好的方法。今天我将尝试一下,但它看起来应该会起作用。我接近了。包括和。在哪里,但我错过了一些东西。这看起来像是我错过的。即使该组中没有给定用户的项,它也会获取组吗?如果该组中没有给定用户的项,则不应获取组,因为join(:items)调用会在SQL中创建内部联接。
@user.items
def Project
  def groups_for_user u
    self.groups.select("DISTINCT groups.*").join(:items).where("items.user_id = ?,u.id)
  end
end