Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用Desive和Sunspot时,如何仅获取已确认的用户?_Ruby On Rails_Ruby On Rails 3_Devise - Fatal编程技术网

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中的数据?