4

これですべてのユーザーを取得しています。
ただし、未確認のユーザーは除外したいと思います。
それらのconfirmed_at属性はnilです。

どうやって?

@search = User.search do  
    fulltext params[:search]
    paginate :page => params[:page], :per_page => 10
end  

@users = @search.results
4

2 に答える 2

6

まず、ユーザーモデルにスコープを追加します。

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 

この助けを願っています

于 2013-02-04T11:21:08.240 に答える
2

私は使用しますUser.where.not(confirmed_at: nil)。モデルにスコープを作成して、簡単にすることができます。

class User < ApplicationRecord

  scope :confirmed, -> { where.not(confirmed_at: nil) }

end

そして、あなたは使用することができますUser.confirmed

于 2017-05-18T03:33:02.453 に答える