0

我有一个Project Model和一个ProjectAttribute Model基本上有 3 个字段:namevalueproject_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
4

1 回答 1

-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")
于 2013-03-26T09:53:45.897 回答