如何解决加入朋友的其他模型
| 我仍然无法在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)
如果您有更有效/更优雅的方法,请告诉我!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。