2

登録後にユーザーが管理者によって承認されるアプリがあります。メンバーリストの管理者を除外するのに少し助けが必要です。

これは私のインデックスメソッドです:

def index
  if params[:is_approved].to_i == 0
    @users = User.find_all_by_is_approved(0) #returns all unapproved users
  else
    @users = User.find_all_by_is_approved(1) #here I wanna filter out the admins
  end   
end

追加しようとしまし&& User.find_all_by_is_admin(0)たが、管理者ではないすべてのユーザー、つまり未承認のユーザーを取得しました。

管理者はユーザーですが、列is_adminがtrueに設定されているため、表示したくありません。

4

1 に答える 1

3

承認されているが管理者ではないユーザーのリストが必要な場合:

User.where(:is_approved => 1, :is_admin => 0)

または、使用していたスタイルで書きたい場合は、次のようにします。

User.find_all_by_is_approved_and_is_admin(1, 0)

あなたがしようとしていることがうまくいかない理由&&は、ブールAND演算子であるためです。

User.find_all_by_is_approved(1) && User.find_all_by_is_admin(0)

ここの両側が&&真と見なされるため、これは右側に評価されます。User.find_all_by_is_admin(0)

Ruby の配列には、2 つの配列の交差&を与える (シングル & サイン) 演算子があります。

User.find_all_by_is_approved(1) & User.find_all_by_is_admin(0)

両方のリストに含まれるユーザーのリストになりますが、2 つの別々のデータベース クエリが発生するため、これは非効率的な方法です。

于 2012-11-22T13:47:18.037 に答える