10

我在我们的项目中使用 act_as_taggable_on 进行标记,同时使用 sunspot/solr 进行搜索。

我们得到了一个奇怪的意外结果。首先我们的设置(短版):

模型:

Class Person
  has_many :projects

  searchable do
    string :project_tags, :multiple => true do
      projects.map { |p| p.tag_list}.flatten
    end
  end

Taglist 是 act_as_taggable_on 中的一个方法,它为每个项目返回一个标签数组(fe [“foo”,“bar”])。我们为项目成员索引项目标签。

当,在我们的控制器中,我们这样做:

Person.search() do
   with(:project_tags).any_of(params[:tags])
end

这会返回合适的人。到目前为止,一切都很好。

问题
我们希望能够搜索多个标签。因此,根据太阳黑子指令,我们传递一个数组。代码大致如下:

@tags_array= params[:tags].split(/ /)
Person.search() do
   with(:project_tags).any_of(@tags_array)
end

现在,无论我们使用什么标签,Sunspot 都会给我们每个人!我们一直在疯狂地在控制台中对此进行测试,但无法理解我们哪里出错了。

任何帮助,将不胜感激!
欧文

4

1 回答 1

8

好的,我们自己“解决”了这个问题,我会在这里报告,以防有人遇到同样的问题。

不知何故,Sunspot 在我们的搜索声明中不喜欢@tags_array,经过一些测试,任何@variable 都将不起作用。一旦我们将其更改为:

tags_array= params[:tags].split(/ /)
Person.search() do
   with(:project_tags).any_of(tags_array)
end

有效。

干杯,
欧文

于 2011-02-21T16:56:19.673 回答