简单的小组与思考狮身人面像

时间:2013-06-10 10:11:23

标签: ruby-on-rails-3 thinking-sphinx

我的Item型号有nameuser_id。我想按用户搜索所有项目和组,以便我可以向每个用户显示他们的项目:

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

...

在控制台中,我试试这个:(From the documentation

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

在没有任何问题的情况下通过返回结果搜索没有组。

怎么了?

1 个答案:

答案 0 :(得分:1)

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

答案越长:该查询不会为您提供所需的结果 - 它将为每个用户返回一个项目。您最好通过user_id进行排序:

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

然后,您可以使用Ruby / Rails获取用户分组每个项目:

items.group_by(&:user)