0

我已经连接了两个查询结果,并希望根据特定条件限制结果。

def all_notifications
  return (user_project_notifications+followed_comments).sort_by(&:created_at).reverse
end

我想将 all_notifications 限制为特定时间后出现的那些,例如:

def new_notifications(notifications_last_viewed)
  return all_notifications.where('created_at >?, notifications_last_viewed)
end

但是,我收到错误未定义的方法 `where' for Array:...

如何对串联结果执行“where”查询?

4

2 回答 2

3

您没有进行数据库排序,请替换:

(user_project_notifications+followed_comments).sort_by(&:created_at).reverse

和:

(user_project_notifications + followed_comments).order('created_at DESC')

您将保持关系而不是获取数组。

我猜这个问题源于+你对数组求和的地方,而你应该加入查询。

一个很好的方法是使用这个 gem

于 2013-08-19T16:20:35.980 回答
1

您不能直接执行此操作,因为在对 应用典型Array(或Enumerable)方法之一(例如“+”)后ActiveRecord::Relation,它会返回Array没有ActiveRecord方法的实例。

我认为您应该使用“OR”在一个查询中获取您的user_project_notificationsand followed_comments- 然后您将拥有ActiveRecord::Relation实例,您可以在该实例上调用范围方法,例如orderor where

于 2013-08-19T16:27:18.743 回答