0

と のItemモデルがnameあり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

group by なしで検索すると、問題なく結果が返されます。

どうしたの ?

4

1 に答える 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 に答える