我现在正在获取所有用户。
但是,我想排除未经确认的用户。
他们的confirmed_at
属性为零。
我怎样才能?
@search = User.search do
fulltext params[:search]
paginate :page => params[:page], :per_page => 10
end
@users = @search.results
我现在正在获取所有用户。
但是,我想排除未经确认的用户。
他们的confirmed_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
编辑:
确实,经过测试,上面的解决方案似乎不起作用。范围似乎被忽略了。还有另一种解决方案:
在您的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