从两个不同的表返回ActiveRecord对象

时间:2018-02-24 03:08:53

标签: ruby-on-rails rails-activerecord

我正在尝试返回一个ActiveRecord对象,该对象由两个不同表中的两个不同对象组成。他们有以下关系:

class User < ApplicationRecord
  has_many :posts, dependent: :destroy
  has_many :pictures, dependent: :destroy

  # Ideally user.timeline returns all of a user's posts and pictures as an active record relation.

  def timeline
      Post.where("(user_id = :user_id)", user_id: id)
      Picture.where("(user_id = :user_id)", user_id: id)    
  end
end

class Post < ApplicationRecord
  belongs_to :user
end

class Picture < ApplicationRecord
  belongs_to :user
end

我希望能够调用user.timeline并将所有用户的帖子和图片作为一个活动记录关系一起返回。

我试过了:     Post.where(“(user_id =:user_id)”,user_id:id)+ Picture.where(“(user_id =:user_id)”,user_id:id)。这将返回我想要的所有对象,但是作为数组,而不是活动的记录关系。

有什么办法可以做到吗?

1 个答案:

答案 0 :(得分:0)

在这种情况下,您应该使用另一个表来处理时间线。

Timeline
user_id:integer
post_id:integer
picture_id:integer

每次用户发送图片或帖子时,它还应该在时间轴中创建一条记录,表示post_id或picture_id或者您想要的任何内容。

由于性能问题,我不喜欢使用外键,因为这是一个时间轴模型。

然后你可以像这样进行查询。

class User < ApplicationRecord
  def timeline
    Timeline.where(user_id: id)
  end
end

您可以使用时间轴模型为每条记录序列化模型。