在我的控制器中,我需要添加一些逻辑运算符,比如,在我的控制器中,但是它不起作用,所以我想,让不同的变量具有各自的条件,然后将它们排序,就好像它们是使用created_at DESC的变量一样。
@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。我是红宝石新手..。
发布于 2016-05-30 20:53:36
对于特定的示例(条件乘以(和)),可以使用ActiveRecord作用域- 这里
它们的目的是命名查询条件,您可以在代码中很好地组合这些条件。将作用域添加到模型中,即从ActiveRecord::Base继承的类
class Activity < ActiveRecord::Base
scope :ordered, -> { order(created_at: :desc) }
scope :commenting, -> { where(key: 'commenting') }
scope :limit, -> { limit(20) }
..然后组合作用域(和条件),您只需使用chanin
Activity.ordered.commenting.limit...同时,对于默认情况下包含的内容有一个default_scope (例如,order )
对于或条件(smt或smt),它更复杂-您似乎使用Arel.table (在ActiveRecord内部)-例如,参见这里
发布于 2016-05-30 20:24:28
ANDs和OR在控制器中工作,您的意思是在控制器的查询中吗?如果试图执行复杂的SQL查询,可以绕过活动记录在原始SQL中执行查询。使用rails find_by_sql方法,如下所示:>querying.html#查找-by-sql
https://stackoverflow.com/questions/37532857
复制相似问题