Rails思考Sphinx: - 如何只选择结果中的一些字段和多个表选择(关联)

1 select field ruby-on-rails thinking-sphinx

我是Thinking Sphinx for Rails的新秀.

当Sphinx找到一条记录时,它会给出表中的所有字段.我如何只选择所需的字段?

在我的情况下,我还需要参考另一个表.我怎样才能做到这一点?

谢谢

Col*_*ley 6

这是一个老线程,但正如我在寻找相同信息时发现的那样,我想我会分享我的答案.

它不是(据我所知)在Thinking Sphinx主页上明确定义,但模型上的搜索功能接受选项:选择 - 并且在回答第二个问题时,它也接受:加入,所以如果你有两个相关型号:

class Project < ActiveRecord::Base
  attr_accessible :name
  has_many :tasks
end

class Task < ActiveRecord::Base
  attr_accessible :name
  belongs_to :project
end
Run Code Online (Sandbox Code Playgroud)

你应该能够像这样搜索你的任务:

Task.search "Fix Bug", 
            :select => 'tasks.id, tasks.name, projects.name as project_name', 
            :joins => [:project]
Run Code Online (Sandbox Code Playgroud)

毫无疑问,这样做的方式稍微简洁一些,所以我很高兴能够得到纠正 - 尽管这个概念很有用!

编辑(思考sphinx v3)

:select在版本3中用作sphinx参数,而应添加:select和添加:joins:sql散列.否则你会得到一些不那么明显的奇怪错误!

上面的例子然后变成:

Task.search "Fix Bug", 
            :sql => { :select => 'tasks.id, tasks.name, projects.name as project_name', 
                      :joins => [:project] }
Run Code Online (Sandbox Code Playgroud)