Rails + Thinking-Sphinx多态关联

时间:2010-11-27 08:32:22

标签: ruby-on-rails thinking-sphinx polymorphic-associations

class User < ActiveRecord::Base
  has_many :followings, :as => :followable, :dependent => :destroy, :class_name => 'Follow'
  has_many :follows, :as => :follower, :dependent => :destroy

  define_index do
    has follows.followable(:id), :as => :followable_id
    has followings.follower(:id), :as => :follower_id
    has follows.followable(:type), :as => :followable_type
    has followings.follower(:type), :as => :follower_type
  end
end 
  1. 问题:我无法按类型搜索(总是空数组)。一个bug?我想让所有关注者都是“AAA”类型的用户。

    User.search'',:with =&gt; {:follower_type =&gt; 'AAA'}

  2. 问题:为什么我必须反转我的关联以获得正确的结果(索引定义): follow.followable(:id),:as =&gt; :followable_id 代替 followings.followable(:id),:as =&gt; :followable_id 我想获得id = 1

    的用户的关注者列表

    User.search:with =&gt; {:followable_id =&gt; 1} #id = 1

  3. 的用户的关注者列表

    THX!

1 个答案:

答案 0 :(得分:2)

关于第一个问题 - 字符串过滤器在Sphinx中不起作用。这应该会在未来改变(使用Sphinx 1.10-beta,一旦思考Sphinx支持新功能),但不确定何时会发生(我很快就会说,但不能承诺任何事情)。

虽然有a workaround可用,但请记住,您正在处理字符串数组,因此这是一个额外的复杂程度。

关于第二个问题,努力让我了解数据库看起来像什么(令人困惑的名字,但我现在缺乏关注),所以我暂时将其留在此处。