我有一个WorkSpace,Project,User和Membership模型。用户拥有许多会员资格,许多项目通过会员资格。项目属于工作空间。
获取用户项目非常简单:
user.projects
但伸手去拿工作空间很棘手。这样的事情会引发undefined method spaces for collection proxy
的错误。
user.projects.work_spaces.unique
如何获得用户参与的一组独特工作空间? (工作空间包含用户通过成员身份所属的项目)。
答案 0 :(得分: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
了。
答案 1 :(得分:1)
user.projects
是项目的集合,这就是您无法直接在其上调用work_spaces
的原因。
您可以使用Enumerable的collect
方法(或map
)来获取所有集合,然后删除重复项:
user.projects.collect(&:work_spaces).flatten.uniq