1

该图像显示了我的数据模型的一部分。我想获取与用户关联的所有项目(通过组织和 items_group)。我应该如何更改模型并在控制器中编写此查询?使用 :through => organizations 我可以获得所有 items_groups 但我不知道如何包含与查询相关项目的另一个关系。

在此处输入图像描述

class User < ActiveRecord::Base           
  has_and_belongs_to_many :organizations
  has_many :items_groups, :through => :organizations         
end

class Organization < ActiveRecord::Base
  has_and_belongs_to_many :users
  has_and_belongs_to_many :items_groups
  has_many :items, :through => :items_groups  
end

class ItemsGroup < ActiveRecord::Base  
  has_many :items, :inverse_of => :items_group
  has_and_belongs_to_many :organizations
  has_many :users, :through => :organizations             
end
4

2 回答 2

4

我认为您可能必须从头到尾进行操作,并找到加入用户的项目。

您可以在 User 类中定义这样的方法:

def items
  Item.joins(:items_group => {:organizations => :users}).where("users.id" => self.id).select("distinct items.*")
end

由于显式,它返回的项目将是只读的,select但我认为您希望避免多次返回单个项目。

于 2012-10-25T20:58:27.713 回答
0

如果您在模型中设置关系,这应该有效:

users.organizations.item_groups.items

尽管要使其正常工作,您的模型应包含以下内容:

class User < ActiveRecord::Base         
  has_many :organizations, :through => :organization_users
end

class Organization < ActiveRecord::Base
  has_many :item_groups, :through => :items_groups_organizations
end

class ItemsGroup < ActiveRecord::Base  
  belongs_to :item
end

希望对你有帮助!

于 2012-10-25T19:29:21.757 回答