在我的控制器中,我需要添加像||这样的逻辑运算符和&&在我的但它没有工作,所以我认为我会更容易为每个变量创建自己的条件,然后对它们进行排序,就好像它们是使用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。我是一个红宝石新手..
答案 0 :(得分:2)
对于特定样本,条件乘以(和),您可以使用ActiveRecord范围 - here
它们的目的是命名您在代码中很好地组合的查询条件。将范围添加到模型中,即从ActiveRecord :: Base
继承的类class Activity < ActiveRecord::Base
scope :ordered, -> { order(created_at: :desc) }
scope :commenting, -> { where(key: 'commenting') }
scope :limit, -> { limit(20) }
..
然后结合范围(和条件),你只是通道
Activity.ordered.commenting.limit...
同时,默认包含的内容有一个default_scope(例如,按顺序排列)
对于或条件(smt或smt)它更复杂 - 您似乎使用Arel.table(在ActiveRecord中) - 请参阅here例如
答案 1 :(得分:1)
ANDs和OR在控制器中工作,你的意思是你的控制器中的查询?如果您尝试执行复杂的SQL查询,则可以绕过活动记录以在原始SQL中执行查询。使用rails find_by_sql方法,如下所示:http://guides.rubyonrails.org/active_record_querying.html#finding-by-sql