Rails连接查询结果“where”

时间:2013-08-19 16:16:34

标签: ruby-on-rails ruby activerecord

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

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”查询?

2 个答案:

答案 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”在一个查询中获取ActiveRecorduser_project_notifications - 然后您将拥有followed_comments实例,您可以在其上调用范围方法,例如{{ 1}}或ActiveRecord::Relation