0

我有一个Item带有nameand的模型user_id。我想按用户搜索所有项目和分组,以便我可以向每个用户显示他们的项目:

  • 用户 1:
    • 项目 A
    • B项
  • 用户 2
    • 项目 C
  • 用户 3
    • 项目 D
    • 项目 E
    • 项目 D

...

在控制台中,我试试这个:(来自文档

Item.search({group_by: :user_id, limit: 50}).all

我明白了:

  Sphinx Query (0.4ms)
  Sphinx  Caught Sphinx exception: can't dup Symbol (0 tries left)
TypeError: can't dup Symbol
from /Users/pinouchon/.rvm/gems/ruby-1.9.3-p392@gemset/gems/riddle-1.5.6/lib/riddle/client/message.rb:18:in `dup'

与此相同的错误:

Item.search({group_by: :user_id, order_group_by: '@count desc'}).each_with_group

没有分组的搜索返回结果没有任何问题。

怎么了 ?

4

1 回答 1

1

快速回答:尝试将属性名称作为字符串而不是符号发送。

更长的答案:该查询不会给你你想要的结果——它会为每个用户返回一个项目。最好按 user_id 排序:

items = Item.search(
  :order     => 'user_id ASC, @weight DESC',
  :sort_mode => :extended,
  :limit     => 50
)

从那里,您可以获取使用 Ruby/Rails 对每个项目进行分组的用户层:

items.group_by(&:user)
于 2013-06-10T10:21:43.857 回答