加入朋友的其他模型

问题描述

| 我仍然无法在ActiveRecord中建立复杂的联接。 我有一个使用Steve Ehrenberg(http://dnite.org)的HasManyFriends插件用户模型。 然后,我有一个UserFeedEvent模型,该模型将用户链接FeedEvent模型。 我要实现的是找到链接用户朋友的所有FeedEvent。 我应该如何编写ActiveRecord查询? 这是我的模型:
class User < ActiveRecord::Base

  has_many_friends

  has_many :Feed_events,:through => :user_Feed_events,:dependent => :destroy
  has_many :user_Feed_events,:dependent => :destroy

end


class UserFeedEvent < ActiveRecord::Base

  belongs_to :Feed_event,:dependent => :destroy
  belongs_to :user

end


class FeedEvent < ActiveRecord::Base
  has_many :user_Feed_events,:dependent => :destroy
  has_many :users,:through => :user_Feed_events

  serialize :data
end
提前致谢! 奥古斯托     

解决方法

挖掘HasManyFriends消息源使我相信以下内容应该可行(或中途进行): 编辑:发现
source
不能指向另一个
:has_many :through
关联。因此,您可以尝试更新的版本。
class User < ActiveRecord::Base
  #...
  has_many :user_feed_events_of_friends_by_me,:through => :friends_by_me,:source => :user_feed_events
  has_many :feed_events_of_friends_by_me,:through => :user_feed_events_by_me

  has_many :user_feed_events_of_friends_for_me,:through => :friends_for_me,:source => :user_feed_events
  has_many :feed_events_of_friends_for_me,:through => :user_feed_events_for_me

  # A wrapper to return full list of two-way friendship events
  def feeds_events_of_my_friends
    self.feed_events_of_friends_by_me + self.feed_events_of_friends_for_me
  end
end
不幸的是,
HMF
插件有两个单向友谊链接,这意味着完整列表需要2个DB查询。     ,我找到了一个可行的,更传统的SQL解决方案:
friends_id = current_user.friends.collect {|f| f.id}.join(\",\")

sql = \"SELECT feed_events.*,user_feed_events.user_id  FROM feed_events LEFT JOIN user_feed_events ON feed_events.id = user_feed_events.feed_event_id WHERE user_feed_events.user_id IN (#{friends_id}) GROUP BY feed_events.id ORDER BY feed_events.created_at DESC\"

friend_feed_events = FeedEvent.paginate_by_sql(sql,:page => params[:page],:per_page => 30)
如果您有更有效/更优雅的方法,请告诉我!