0

我有一个 WorkSpace、Project、User 和 Membership 模型。一个用户有许多会员资格,并且通过会员资格有许多项目。一个项目属于一个工作空间。

获取用户项目非常简单:

user.projects

但是想要找到工作空间是很棘手的。这样的事情会引发undefined method spaces for collection proxy.

user.projects.work_spaces.unique

如何获得用户参与的一组独特的工作空间?(具有用户通过成员资格所属的项目的工作空间)。

4

2 回答 2

2

如果您使用 ActiveRecord,我建议利用它的关联方法来避免 .collect(&:work_spaces).flatten.uniq 的冗长代码和较差的性能。

class User < ActiveRecord::Base
  has_many :memberships
  has_many :projects, through: :memberships
  has_many :work_spaces, through: :projects
end

然后你就可以要求了user.work_spaces

于 2013-08-12T21:55:00.420 回答
1

user.projects是项目的集合,所以不能work_spaces直接调用。

您可以使用 Enumerable 的collect方法(或map)来获取所有集合,然后去除重复项:

user.projects.collect(&:work_spaces).flatten.uniq
于 2013-08-12T20:46:03.187 回答