如何搜索has_many关系字段作为标准太阳黑子轨道

时间:2013-03-25 17:09:57

标签: ruby-on-rails ruby sunspot sunspot-rails

我有项目模型 ProjectAttribute模型,基本上有3个字段:名称 project_id ,用于存储关于项目的键值记录,我尝试过以下方法,但没有任何成功。

project.rb

class Project < ActiveRecord::Base
  has_many :project_attributes

  searchable do
    text :title, :boost => 2
    text :description
    string :att_name, :multiple => true do
      project_attributes.map { |p| p.name }
    end

    string :att_value, :multiple => true do
      project_attributes.map { |p| p.value }
    end

  end
end

可以使用 ProjectAttribute字段作为 Project.search 的条件,让所有项目都有3个房间吗?

例如:

Project.search do 
    with(:att_name, 'rooms')
    with(:att_value, '3')
end

1 个答案:

答案 0 :(得分:-2)

不需要太阳黑子 - 您可以使用基本的ActiveRecord查询和范围来执行此操作。

让我们开始简单:你只想找到有3个​​房间的项目。查询将是:

Project.joins(:project_attributes).where("project_attributes.name = 'rooms' AND project_attributes.value = '3'")

将其转换为Project上的范围:

scope :search, joins(:project_attributes).where("project_attributes.name = 'rooms' AND project_attributes.value = '3'")

但当然你想接受变量输入:

scope :search, lambda { |name, value| joins(:project_attributes).where("project_attributes.name = ? AND project_attributes.value = ?", name, value) }

允许你这样做:

Project.search("rooms","3")