我想这是一个设计问题:
我有一个显示用户朋友的故事(状态)的应用程序。这些朋友还将照片发布到我想合并到同一索引的相册中。如果索引的项目(状态或图片)是图片.each
,则可以通过语句设置显示,然后类似地使用状态,但使用不同的显示。因此,我必须能够区分页面上的两者,但我需要将两者结合起来,然后按排序created_at
,类似于facebook的墙式供稿。
在我的控制器中,我已经传入了变量
@statuses = Status.order('created_at desc')
@pictures = Picture.order('created_at desc')
然后在我看来(缩小版)
@pictures.each do |picture|
...do one thing...
end
@statuses.each do |status|
...do something different...
end
我该如何在同一视图中同时渲染@statuses和@pictures并基于created_at字段对其进行排序,但同时使用自己的显示来显示它们呢?
经过进一步的研究,我使用了在SO上找到的这种“ hack / together /解决方案” 。
它使用:
@combinedfeed = (Status.all + Picture.all).sort{|a,b| b.created_at <=> a.created_at }
这是降序排列的。切换.all以根据需要进行限制。
然后,我会在每个数据库中添加一列,默认情况下是否为类型,这对我个人而言将在我们计划的一些更新中派上用场。将它们添加到相应的表中:
add_column :pictures, :feedtype, :string, :default => "image"
add_column :statuses, :feedtype, :string, :default => "status"
然后,在视图中,我执行以下操作:
@combinedfeed.each do |value|
if value.feedtype == "image"
...place content for picture loop here, replacing picture with value
ie ->old: if signed_in? && (current_user == picture.user)
new: if signed_in? && (current_user == value.user)
end
elsif value.feedtype == "status"
...place content for picture loop here replacing status with value
end
end
希望这可以帮助其他人。我确信这不是最佳解决方案性能,但可以完成工作。如果有人有更好的解决方案来达到相同的结果,并且可以在高流量站点上更好地处理,请分享!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句