我现在正在获取所有用户
但是,我想排除未确认的用户
它们的confirmed_at
属性为nil。
我该怎么办?
@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
编辑:
事实上,经过测试,上面的解决方案似乎不起作用。范围似乎被忽略了。还有另一种解决方案:
在您的User
模型中,您可能有这样的方法:
searchable do
text :lastname, :firstname
...
end
您必须向searchable
:添加一个条件
searchable if: proc { |user| user.confirmed? } do
text :lastname, :firstname
...
end
编辑2:
如果有时你想要确认用户,有时想要所有用户,但你也需要修改你的模型,还有另一种方法。
在您的User
型号中:
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(confirmed_at: nil)
。您可以在模型中创建一个范围,使其更容易:
class User < ApplicationRecord
scope :confirmed, -> { where.not(confirmed_at: nil) }
end
然后您可以使用User.confirmed