Ruby on rails 斯芬克斯滤波与关联的思考

Ruby on rails 斯芬克斯滤波与关联的思考,ruby-on-rails,ruby,ruby-on-rails-4,thinking-sphinx,Ruby On Rails,Ruby,Ruby On Rails 4,Thinking Sphinx,我有以下模型和索引,可以使用曲目标题和艺术家姓名搜索曲目: 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: f

我有以下模型和索引,可以使用曲目标题和艺术家姓名搜索曲目:

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
索引/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
但这假定在您的
风扇中有
的列(和
)-是这样吗


另外,您使用的是Thinking Sphinx和Rails的哪些版本?

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

gem 'joiner', '~> 0.3.4'
后来,我得到了以下关于协会问题的帖子:


谢谢您的回复。我已经编辑了原始帖子以添加gem信息。我从github提交中得到了问题。后来,我得到了另一篇与我的答案相关的帖子。
#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
gem 'joiner', '~> 0.3.4'