如何收集我所属团体成员所拥有的所有主题?

时间:2013-03-28 20:07:04

标签: ruby-on-rails model-associations ruby-on-rails-4

这对我来说可能很难解释,所以如果不清楚就让我知道,我可以根据需要进行编辑!

我有以下示例:

class User < ActiveRecord::Base
  has_many :topics
  has_many :memberships
end

class Topic < ActiveRecord::Base
  belongs_to :user
end

#join model between User and Group
class Membership < ActiveRecord::Base
  belongs_to :user
  belongs_to :group
end

class Group < ActiveRecord::Base
  has_many :memberships
  has_many :members, :through => :memberships, :source => :user
  has_many :topics, :through => :members
end

我遇到的问题是我正在尝试创建一个由我所属团体的所有成员拥有的所有主题的Feed(@feed_topics),并且我正在自己开车有点疯狂。

我是否应该尝试使用关联来实现这一点,或者在我的User模型中创建一个具有一些ActiveRecord / SQL的实例方法,以将所有组的成员主题合并到一个ActiveRecord :: Relation对象中?

我的目标是在控制器的操作中编写current_user.feed_topics

2 个答案:

答案 0 :(得分:1)

很抱歉没有提前解释!我们的想法是利用'嵌套has_many_through'来获取您的Feed主题。此概念在“嵌套关联”标题下记录:http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html。 让我知道这是否仍然不清楚(或者如果它不起作用)。

class User < ActiveRecord::Base
  has_many :topics
  has_many :memberships
  has_many :groups, :through => :membership
  has_many :group_members, :through => :groups, :source => :member
  has_many :feed_topics, :through => :group_members, :source => :topic
end

答案 1 :(得分:1)

到目前为止,这些是原始问题的模型的最终版本(主题和成员资格没有改变):

class User < ActiveRecord::Base
  has_many :topics
  has_many :memberships
  has_many :groups, :through => :memberships
  has_many :feed_topics, :through => :groups, :source => :member_topics
end

class Group < ActiveRecord::Base
  has_many :memberships
  has_many :members, :through => :memberships, :source => :user
  has_many :member_topics, :through => :members, :source => :topics
end

我现在正在通过添加更多群组和成员进行测试,看看它是否会提取其他群组的所有其他成员的主题。

编辑:事情似乎正常。

EDIT2:我遇到的一个小问题是看到重复的主题,因为一个成员在多个组中。我了解了:uniq => true并且它节省了一天。