我正在尝试执行查询,并使用sunspot_solr gem查找最近在多个模型中创建的20条记录。目前它实现了没有问题,但我想为只有一个被搜索的模型添加一些额外的验证。
目前在我的用户模型中,它列出了所有已创建的新用户,但我只希望它列出已确认其电子邮件地址的用户。我正在使用Devise进行用户身份验证,并使用活动记录查找尚未确认的所有用户,我会按照以下方式执行操作:
User.where("confirmed_at is null")
反过来测试相反的情况。我尝试将其与我的solr搜索集成为......
模型
#Unless the user being searched hasn't been confirmed...
searchable :unless=> proc { |user| user.confirmed_at == nil } do
time :created_at
time :confirmed_at
end
控制器
@updates = Sunspot.search(Upload,Help,User) do
without(:confirmed_at, nil)
order_by(:created_at, :desc)
paginate page: 1, per_page: 20
end
但是,此添加条件仅消除了将条件添加到模型后创建的用户记录。我不完全确定索引是如何工作的,但它似乎在缓存旧信息,其中没有应用新添加的条件。我可以通过创建一个新的用户记录来确认这一点,我立即注意到,在我验证电子邮件地址之前,它不会被编入索引。
我尝试了什么:
答案 0 :(得分:1)
在阅读了一些关于索引的内容后,我确认了我的怀疑并发现我必须重新索引我的搜索。为此,我查看了Sunspot readme并找到了这一行:
bundle exec rake sunspot:solr:reindex
我有一个习惯,在我明白他们做什么之前尝试使用技术......