2009-10-27 60 views
2

我們有我們想要在堆棧中表示的對象(想想在MMO中​​堆積項目)。將會有重複的行。ActiveRecord中的計數和選擇對象,帶有1個查詢

假設我們的owned_objects表看起來像這樣。

user_id | object_id 
1  | 27 
1  | 27 
3  | 46 
3  | 46 
5  | 59 

我希望查詢做

SELECT 
    user_id, 
    object_id, 
    count(*) AS count 
FROM owned_objects 
GROUP BY 
    user_id, 
    object_id; 

,並返回無論是3角不同的OwnedObject秒(甚至只是越來越清晰Object s就工作太),以及與之相關聯的計數。

我知道這可能與SQLAlchemy,但你可以用ActiveRecord做到這一點?

回答

3

......怎麼

@objects = user.objects.all(:select => "count(*) as count, objects.*", :group => :object_id) 

...或類似的?

然後,您可以通過在每個對象上動態創建的屬性檢索次數:

@object.first.count # the "stack depth" of the first object. 

這是假定無論是has_and_belongs_to_many :objects或用戶has_many :objects, :through => :owned_objects

+0

嗯,所以我試過了,它返回的對象,並執行正確的查詢,但如何從該調用中檢索計數? – mikelikespie 2009-10-27 01:48:28

+0

它應該位於各個對象的#count屬性中。 – cwninja 2009-10-27 01:55:00

+0

不要以爲這是工作,因爲反射沒有看到一列稱爲計數。用'#count'你指的只是類方法,'count',courrect? – mikelikespie 2009-10-27 17:31:04

0

找到a解決方案,但不知道它是否最乾淨(希望它不是)。

基本上,我創建了一個SQL查看來完成該查詢併爲其創建了一個模型。有一個用於識別遷移視圖的rails插件。