让我们假设我们有两个用户,
用户A ,附:
用户B ,附:
我只想匹配用户A ,即具有5年Ruby经验的用户。
下面的控制器和型号代码与用户A和B都匹配,因为skill
和experience_years
是单独评估的,并且两个用户都有'Ruby'和'5',只是不在一起。
如何编写控制器(或模型)部件以仅匹配用户A?
模型
class User < ApplicationRecord
has_many :user_skills
searchable do
text :skill do
user_skills.map { |r| r.skill.name }
end
text :experience_years do
user_skills.pluck(:experience_years)
end
end
end
class UserSkill < ApplicationRecord
belongs_to :user
belongs_to :skill
end
class Skill < ApplicationRecord
end
控制器
class UsersController < ApplicationController
def index
sunspot = User.search do
fulltext 'Ruby' do
fields(:skill)
end
fulltext '31' do
fields(:experienceYears)
end
end
@users = sunspot.results
end
end
答案 0 :(得分:0)
解决方案是使用动态整数。
模型(可搜索的内部块):
# skill + experienceYears composite field:
dynamic_integer :skill_composite do
if skills
skills.inject({}) do |hash, e|
hash.merge(e.skill.skill_code => e.experience_years)
end
end
end
控制器:
with(skill_code).equal_to experience_years
请注意使用skill_code
而不是name
,这是因为字符串中的空格等特殊字符会导致麻烦。在这种情况下,skill_code
是一种参数化的名称值。