我们想要在堆栈中表示对象(想想在MMO中堆叠项目)。会有重复的行。
假设我们的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
s(或者甚至只是让不同的Object
s也能正常工作)和与之相关的计数。
我知道SQLAlchemy可以实现这一点,但是你能用ActiveRecord吗?
答案 0 :(得分: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
。
答案 1 :(得分:0)
找到一个解决方案,但不确定它是否最干净(希望不是)。
基本上我创建了一个SQL视图来执行该查询并为其创建模型。有一个用于识别迁移视图的rails插件。