具有 belongs_to 关联的思维狮身人面像过滤

thinking-sphinx filtering with belongs_to association

我有以下模型和索引来使用曲目名称和艺术家姓名搜索曲目:

models/track.rb

class Track < ActiveRecord::Base
  include ThinkingSphinx::Scopes

  belongs_to :artist, :class_name => 'Fan', :foreign_key => 'fan_id'


  sphinx_scope(:of_fan) do |fan_id|
    {with: {fan_id: fan_id}}
  end

  def artist_name
    artist.name
  end
end

models/fan.rb

class Fan < User
  has_many :tracks
end

models/user.rb

class User < ActiveRecord::Base
  #Codes...
end

Gem 列表:

gem 'rails', '4.1.0.rc1'
gem 'thinking-sphinx', '~> 3.1.3'

indices/track_index.rb

ThinkingSphinx::Index.define :track, :with => :active_record, :delta => true do
  indexes title

  has plays_count, :as => :play_count
end

我已尝试使用以下所有选项重建索引,但没有任何效果并在此块下生成错误:

indexes artist(:first_name), :as => :artist_name
indexes artist.first_name, :as => :artist_name
indexes artist_name
indexes [artist.first_name, artist.last_name], :as => :artist_name

错误:

#For..
#indexes artist(:first_name), :as => :artist_name
#indexes artist.first_name, :as => :artist_name
ERROR: index 'track_delta': sql_range_query: ERROR:  syntax error at or near "AS"
LINE 1: ..."title" AS "title",  AS "author...
                                    ^
 (DSN=pgsql://username:***@localhost:5432/db_name).


#For - indexes [artist.first_name, artist.last_name], :as => :artist_name
rake aborted!
NoMethodError: undefined method `reflections' for nil:NilClass
/Users/morshedalam/.rvm/gems/ruby-2.0.0-p598/gems/joiner-0.2.0/lib/joiner/joins.rb:64:in `reflection_for'
/Users/morshedalam/.rvm/gems/ruby-2.0.0-p598/gems/joiner-0.2.0/lib/joiner/joins.rb:33:in `join_for'
/Users/morshedalam/.rvm/gems/ruby-2.0.0-p598/gems/joiner-0.2.0/lib/joiner/joins.rb:18:in `alias_for'
......

如有任何帮助,我们将不胜感激。

这两个都应该有效:

indexes artist.first_name, :as => :artist_name
indexes [artist.first_name, artist.last_name], :as => :artist_name

但这假设您的 Fan 模型中有 first_name(和 last_name)的列 - 是这种情况吗?

此外,您使用的是哪个版本的 Thinking Sphinx 和 Rails?

好的,我找到了解决方案。该问题与 joiner gem 更新有关。将 rails 更新到 4.1.0 并将连接器 gem 添加到 Gemfile 解决了我的问题:

gem 'joiner', '~> 0.3.4'

后来,我得到了与关联问题相关的post:

Rails 4.1 - thinking-sphinx association not working