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 中的数组上有一个(single & sign) 运算符,它给出了 2 个数组的交集,即

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

将是两个列表中的用户列表,但这是一种低效的方法,因为它会导致 2 个单独的数据库查询。

于 2012-11-22T13:47:18.037 回答