首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何按时间在rails中订购多个ActiveRecords?

问如何按时间在rails中订购多个ActiveRecords?
EN

Stack Overflow用户
提问于 2016-05-30 19:55:10
回答 2查看 448关注 0票数 1

在我的控制器中,我需要添加一些逻辑运算符,比如,在我的控制器中,但是它不起作用,所以我想,让不同的变量具有各自的条件,然后将它们排序,就好像它们是使用created_at DESC的变量一样。

代码语言:javascript
复制
@postActivity = PublicActivity::Activity.order("created_at DESC").where( owner_id: current_user.following.ids, key: 'posting' ).limit(20).all
@commentActivity = PublicActivity::Activity.order("created_at DESC").where( key: 'commenting' ).limit(20).all

情况比上面的要复杂得多。如果你能指出一种不同的方式,那就一定要这样做,非常感谢。PS。我是红宝石新手..。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-30 20:53:36

对于特定的示例(条件乘以(和)),可以使用ActiveRecord作用域- 这里

它们的目的是命名查询条件,您可以在代码中很好地组合这些条件。将作用域添加到模型中,即从ActiveRecord::Base继承的类

代码语言:javascript
复制
class Activity < ActiveRecord::Base
  scope :ordered, -> { order(created_at: :desc) }
  scope :commenting, -> { where(key: 'commenting') }
  scope :limit, -> { limit(20) }
..

然后组合作用域(和条件),您只需使用chanin

代码语言:javascript
复制
Activity.ordered.commenting.limit...

同时,对于默认情况下包含的内容有一个default_scope (例如,order )

对于或条件(smt或smt),它更复杂-您似乎使用Arel.table (在ActiveRecord内部)-例如,参见这里

票数 2
EN

Stack Overflow用户

发布于 2016-05-30 20:24:28

ANDs和OR在控制器中工作,您的意思是在控制器的查询中吗?如果试图执行复杂的SQL查询,可以绕过活动记录在原始SQL中执行查询。使用rails find_by_sql方法,如下所示:>querying.html#查找-by-sql

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

https://stackoverflow.com/questions/37532857

复制
相关文章

相似问题

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