我已连接两个查询结果,并希望根据特定条件限制结果。
def all_notifications
return (user_project_notifications+followed_comments).sort_by(&:created_at).reverse
end
我想限制那些在一段时间之后发生的所有通知,所以像这样:
def new_notifications(notifications_last_viewed)
return all_notifications.where('created_at >?, notifications_last_viewed)
end
然而,我收到错误未定义的方法`where:for Array:...
如何对连锁结果执行“where”查询?
答案 0 :(得分:3)
您没有进行数据库排序,请替换:
(user_project_notifications+followed_comments).sort_by(&:created_at).reverse
使用:
(user_project_notifications + followed_comments).order('created_at DESC')
你会保持一种关系而不是获得数组。
我想这个问题源于你对数组进行求和的+
,而你应该加入查询。
这样做的好方法是使用this gem
答案 1 :(得分:1)
您不能直接执行此操作,因为在Array
上应用典型的Enumerable
(或ActiveRecord::Relation
)方法之一(例如“+”)后,它会返回{{ 1}}实例,没有Array
方法。
我认为您应该使用“OR”在一个查询中获取ActiveRecord
和user_project_notifications
- 然后您将拥有followed_comments
实例,您可以在其上调用范围方法,例如{{ 1}}或ActiveRecord::Relation
。