2

我有一个表来存储返回用户列表的查询。然后,我对“香蕉”模型有一个“get_public”方法,该模型使用它们之间的逻辑与来执行多个查询。

所以,当我这样做时

Banana.find(x).get_public我收到一组用户(适合该香蕉对象的用户)。

get_public 方法是这样的:

def get_public
  pb = []
  banana_queries.each do |q|
    pb << User.find_by_sql(q.query)
  end
  pb.inject(:'&')
end

但是,如果我能得到 ActiveRecord::Relation 那就太好了。之后我想做这样的事情:有什么Banana.find(x).get_public.where(...) 方法可以修改 get_public 并实现这一点?

4

1 回答 1

1

我不确定我是否正确地解决了这个问题,但无论如何我都会尽力提供帮助。

here所述

  • 其中返回一个 ActiveRecord::Relation
  • find(及其相关的动态方法)返回单个模型对象

所以我建议将您的查询分为:'joins' 和 'where' 字段。您的新代码应如下所示:

 pb << User.joins(q.query_joins).where(q.query_where)

在 rails 4 中也不推荐使用 find 方法,因此建议使用 where 。

希望我没有错过太多的重点:-)

于 2013-08-28T16:33:55.240 回答