我正在尝试返回一个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)。这将返回我想要的所有对象,但是作为数组,而不是活动的记录关系。
有什么办法可以做到吗?
答案 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
您可以使用时间轴模型为每条记录序列化模型。