获取rails ActiveRecord而不是多个查询的对象Array

时间:2013-08-28 16:17:52

标签: mysql sql ruby-on-rails ruby activerecord

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

所以,当我做的时候

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并实现这个目的吗?

1 个答案:

答案 0 :(得分:1)

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

如预期here

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

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

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

此外,在rails 4中也会弃用find方法,因此建议使用where。

希望我没有太多错过这一点: - )