Thinking-Sphinx with ActsAsTaggableOn标签搜索

时间:2014-07-22 14:34:57

标签: ruby-on-rails ruby ruby-on-rails-4 thinking-sphinx acts-as-taggable-on

我有一个Rails应用,我在其中使用Thinking-Sphinx进行搜索,使用ActsAsTaggableOn进行标记。我希望能够在搜索查询中包含当前选定的标记。我尝试过以下但没有让它起作用。

在我的控制器中:

def show

  @team_tags = @team.ideas.tag_counts_on(:tags)

  if params[:tag]
    @ideas = @team.ideas.search(params[:search], :conditions => { tags: "tag" })
  else
    @ideas = @team.ideas.search(params[:search])
  end

end

我的Idea模型的索引:

ThinkingSphinx::Index.define :idea, :with => :real_time do
  [...]
  indexes tags.name, :as => :tags

  has user_id, type: :integer
  has team_id, type: :integer
  [...]
end

这给了他以下错误:

ActionView::Template::Error (index idea_core: query error: no field 'tags' found in schema

当我选择了标签时,URLs看起来像这样:

/teams/1/tags/tag

那么,我应该怎样做才能让Thinking-SphinxActsAsTaggableOn一起工作?

1 个答案:

答案 0 :(得分:1)

你所获得的领域只适用于SQL支持的索引,而不是实时索引。

在您的情况下,您要做的是在模型中创建一个方法,将所有标记名称作为单个字符串返回:

def tag_names
  tags.collect(&:name).join(' ')
end

然后你可以在索引定义中引用它:

indexes tag_names, :as => :tags

完成后,您需要重新生成Sphinx索引,因为您已更改结构:rake ts:regenerate