Ruby on rails 使用Desive和Sunspot时,如何仅获取已确认的用户?
我现在正在获取所有的用户。Ruby on rails 使用Desive和Sunspot时,如何仅获取已确认的用户?,ruby-on-rails,ruby-on-rails-3,devise,Ruby On Rails,Ruby On Rails 3,Devise,我现在正在获取所有的用户。 但是,我想排除未确认的用户。 他们的confirm\u at属性为零 我该怎么办 @search = User.search do fulltext params[:search] paginate :page => params[:page], :per_page => 10 end @users = @search.results 首先将作用域添加到用户模型: scope :confirmed, where("confirm
但是,我想排除未确认的用户。
他们的
confirm\u at
属性为零
我该怎么办
@search = User.search do
fulltext params[:search]
paginate :page => params[:page], :per_page => 10
end
@users = @search.results
首先将作用域添加到用户模型:
scope :confirmed, where("confirmed_at IS NOT NULL")
然后,您只需在搜索之前添加范围
@search = User.confirmed.search do
fulltext params[:search]
paginate :page => params[:page], :per_page => 10
end
编辑:
事实上,经过测试,上述解决方案似乎不起作用。范围似乎被忽略了。还有另一个解决方案:
在您的用户
模型中,您可能有这样一种方法:
searchable do
text :lastname, :firstname
...
end
您必须在可搜索的中添加一个条件:
searchable if: proc { |user| user.confirmed? } do
text :lastname, :firstname
...
end
编辑2:
如果有时需要确认用户,有时需要所有用户,但也需要修改模型,那么还有另一种方法
在您的用户中
型号:
searchable do
text :lastname, :firstname
boolean :confirmed do
confirmed_at != nil
end
...
end
然后在你的控制器里
@search = User.search do
fulltext params[:search]
with(:confirmed, true) # true if you want confirmed users, false for unconfirmed and if you want all users you don't write this line
paginate :page => params[:page], :per_page => 10
end
我希望这有助于我使用User.where.not(确认地址:nil)
。您可以在模型中创建一个作用域以使其更容易:
class User < ApplicationRecord
scope :confirmed, -> { where.not(confirmed_at: nil) }
end
class用户{where.not(已确认\u at:nil)}
结束
然后你可以使用User.confirated
它仍然会获取所有未确认的用户:(索引重要吗?我认为如果已经建立了索引,它会忽略作用域。你能告诉我如何仅在控制器中完成这一切吗?出于某种原因,这次我想在控制器中完成这一切:)不幸的是,您必须在模型中编辑您的可搜索方法。但是,如果有时您希望拥有已确认用户、未确认用户或所有用户,则还有另一种解决方案。在我的情况下,我做了第二次编辑。第二版看起来最好!但是它得到了这个错误:(Sunspot::UnrecognizedFeldError(没有为名为“已确认”的用户配置字段):
您是否运行了rake Sunspot:reindex
来重新索引Sunspot中的数据?