将两个ActiveRecord关联集合合并到单个关联集合中

时间:2018-10-02 13:42:26

标签: ruby-on-rails ruby postgresql activerecord

我有一个Post模型,用户可以在其中添加类似于facebook的帖子。

在新闻提要中,我想按相对于created_at降序显示它们。

问题是

current_user.posts

返回其帖子,而

current_user.networks.each {|network| network.connection.posts}

返回他的联系信息。

我想结合两个结果,以便我可以写类似的东西

all_posts.order(created_at: :desc)

或者有更好的方法吗?

编辑

带有代码

user.rb

has_many :posts

post.rb

belongs_to :user

network.rb

belongs_to :user
belongs_to :connection, class_name: 'User'

其中网络模型是一个联合的和自引用的模型,具有 user_id connection_id 列,并且当两个用户成为朋友时都会更新。

1 个答案:

答案 0 :(得分:1)

尝试:

user_post_ids = current_user.post_ids
connection_post_ids = []
current_user.networks.each do |network|
  connection_post_ids += network.connection.post_ids
end
post_ids = user_post_ids + connection_post_ids

all_posts = Post.where(id: post_ids).order(created_at: :desc)