rails:包括多态关联
组合2个对象和排序轨道5
这是我当前的代码:
user.rb
def photo_feed
following_ids = "SELECT followed_id FROM relationships
WHERE follower_id = :user_id"
Photo.approved.where("user_id IN (#{following_ids})", user_id: id)
end
def video_feed
following_ids = "SELECT followed_id FROM relationships
WHERE follower_id = :user_id"
Video.approved.where("user_id IN (#{following_ids})", user_id: id)
end
UsersController
def feed
@user_feed_photo_items = current_user.photo_feed.order('created_at desc').paginate(page: params[:page], per_page: 15)
@user_feed_video_items = current_user.video_feed.order('created_at desc').paginate(page: params[:page], per_page: 15)
end
用户关注上传照片和视频的其他用户。我的目标是停止分开照片和视频,而是在created_at
订购的上述答案中所述的多态性关联中显示照片和视频。
但是我链接的上述答案要简单得多。创建新对象时,它将仅将其添加到时间表中。就我而言,在用户关注另一个用户之前,将不会将对象添加到时间轴中,并且在取消关注时,他们需要删除时间表。而且他们仍然需要按时间表中的created_at
日期进行排序。
我该如何实现这一目标?
通常要这样做,您将拥有从单个基类继承的两个类,例如:
class Media < ActiveRecord::Base
end
class Video < Media
end
class Audo < Media
end
,将有一个名为medias
的基础表。参见http://guides.rubyonrails.org/association_basics.html#polymorphic-sassociations
如果您被两个单独的表扎了,那么一个解决方案是创建一个视图,例如,如果您使用的是Postgres,则类似的东西:
CREATE OR REPLACE VIEW media AS
SELECT id, 'Video' as type, a,b,c FROM videos
UNION
SELECT id, 'Audio' as type, a,b,c FROM audios;
然后在此基础上创建一个"假"模型:
class Media < ActiveRecord::Base
end
然后,您可以将其用作仅阅读记录,以查询。