我有项目模型和 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
答案 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")