首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby on rails -使用SQL/ActiveRecord而不是ruby对数据进行排序

问Ruby on rails -使用SQL/ActiveRecord而不是ruby对数据进行排序
EN

Stack Overflow用户
提问于 2017-03-31 06:26:01
回答 3查看 74关注 0票数 0

我正在使用两个表Video和Picture,我想使用SQL而不是ruby对它们进行重新组合。我现在是这样做的:

代码语言:javascript
复制
@medias = (Video.all + Picture.all).sort_by { |model| model.created_at }

他们有没有办法只用SQL/ActiveRecord来做同样的事情?

EN

回答 3

Stack Overflow用户

发布于 2017-03-31 07:25:09

由于您在每个模型中没有相同的列,因此您可以与一个名为media的新模型创建多态关系。你的视频和图片将与这个新模型相关联,当你只需要在你的媒体上工作时,你不需要担心它是视频还是图片。我不确定这是否适合你的模式和设计,因为你的帖子中没有太多的信息,但如果你想花时间重组你的模式,这可能会起作用。这将允许您使用查询接口访问介质。请参阅此处的Rails指南:

http://guides.rubyonrails.org/association_basics.html#polymorphic-associations

您可以使用满足Video或Picture对象所需的所有字段来创建媒体模型。媒体模型还将有一个type字段来跟踪它是什么类型的媒体:视频或图片。

票数 2
EN

Stack Overflow用户

发布于 2017-03-31 06:27:00

是,使用ActiveRecord的#order

代码语言:javascript
复制
@video = Video.order(:created_at)
@pictures = Picture.order(:created_at)
@medias = @video.all + @pictures.all # Really bad idea!

此外,在模型上调用all会不必要地将它们加载到内存中。如果您当时并不是绝对需要所有记录,那么就不要使用all。

票数 1
EN

Stack Overflow用户

发布于 2017-03-31 07:03:21

要在Rails中运行sql查询,您可以这样做:

代码语言:javascript
复制
sql_statement = "Select * from ..."
@data = ActiveRecord::Base.connection.execute(sql_statement)

然后在您的视图中,您可以简单地引用@data对象

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43129391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档