0

这对我来说可能很难解释,所以如果不清楚,请告诉我,以便我可以根据需要进行编辑!

我有以下示例:

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_topics所属的组的所有成员所拥有的所有主题创建一个提要 (),而且我让自己有点发疯。

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

我的目标是写current_user.feed_topics在我的控制器的动作中。

4

2 回答 2

1

抱歉没有早点解释!这个想法是利用“嵌套 has_many_through”来访问您的提要主题。这个概念记录在标题“嵌套关联”下: 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
于 2013-03-28T21:42:01.127 回答
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这一点,它挽救了这一天。

于 2013-03-28T23:21:51.777 回答