我正在使用两个表Video和Picture,我想使用SQL而不是ruby对它们进行重新组合。我现在是这样做的:
@medias = (Video.all + Picture.all).sort_by { |model| model.created_at }他们有没有办法只用SQL/ActiveRecord来做同样的事情?
发布于 2017-03-31 07:25:09
由于您在每个模型中没有相同的列,因此您可以与一个名为media的新模型创建多态关系。你的视频和图片将与这个新模型相关联,当你只需要在你的媒体上工作时,你不需要担心它是视频还是图片。我不确定这是否适合你的模式和设计,因为你的帖子中没有太多的信息,但如果你想花时间重组你的模式,这可能会起作用。这将允许您使用查询接口访问介质。请参阅此处的Rails指南:
http://guides.rubyonrails.org/association_basics.html#polymorphic-associations
您可以使用满足Video或Picture对象所需的所有字段来创建媒体模型。媒体模型还将有一个type字段来跟踪它是什么类型的媒体:视频或图片。
发布于 2017-03-31 06:27:00
是,使用ActiveRecord的#order
@video = Video.order(:created_at)
@pictures = Picture.order(:created_at)
@medias = @video.all + @pictures.all # Really bad idea!此外,在模型上调用all会不必要地将它们加载到内存中。如果您当时并不是绝对需要所有记录,那么就不要使用all。
发布于 2017-03-31 07:03:21
要在Rails中运行sql查询,您可以这样做:
sql_statement = "Select * from ..."
@data = ActiveRecord::Base.connection.execute(sql_statement)然后在您的视图中,您可以简单地引用@data对象
https://stackoverflow.com/questions/43129391
复制相似问题