2013-08-28 22 views
2

我有一個表,用於存儲返回用戶列表的查詢。 然後我有一個方法「get_public」到一個「香蕉」模型,使用它們之間的邏輯AND執行多個查詢。獲取軌道ActiveRecord而不是多個查詢的對象數組

所以,當我做

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 ::關係來代替。我想這樣做後:Banana.find(x).get_public.where(...) 任何方式來修改get_public並實現這一點?

+0

您是否嘗試過包括'的ActiveRecord :: QueryMethods'在你的類來獲得相關的查詢方法? – Bala

+0

什麼是'pb.inject(:'&')'應該在這種情況下做,並且你測試了它的行爲? –

+0

它是陣列之間的「邏輯與」。 –

回答

1

我不確定我是否正確地解決了問題,但我會盡力幫助。

由於especified here

  • 其中返回一個ActiveRecord ::關係
  • 發現(及其相關動態方法)返回單個模型對象

因此,我建議將您的查詢到: 'join'和'where'字段。你的新代碼應該看起來像這樣:

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

另外找到的方法將被棄用在rails 4中,所以使用建議的地方。

希望我沒有理解錯了太多:-)

相關問題