2014-02-26 44 views
1

我想在Rails中使用.reject方法从搜索中删除current_user。我这样做如下:Rails .reject打开类型ActiveRecord ::与类型数组的关系

@users = User.where{(firstname =~ my{"%#{params[:term]}%"}) | (lastname =~ my{"%#{params[:term]}%"}) | (email =~ my{"%#{params[:term]}%"})}.select("id,firstname, lastname") 
@users = @users.reject{|u| User.find(u.id) == current_user} 

第一行后,如果我叫@users.class,我得到ActiveRecord::Relation,但使用.reject方法之后,如果我叫@users.class我得到Array

如何在使用.reject方法后维护ActiveRecord::Relation?我需要一个ActiveRecord::Relation为了使用.paginate方法在我的下一行,这就是:

@user = @users.paginate(:page => params[:page], :per_page => params[:page_limit]) 

回答

7

你应该总是使用ActiveRecordapi query methods得到一个ActiveRecord::Relationreject不是)。例如,结合where

@users = User.where(your_first_conditions). 
       where("id != :id", id: current_user.id). 
       select([:id, :firstname, :lastname]) 
+0

谢谢,效果很好!快速任务 - 为什么使用最后一个'select([:id,:firstname,:lastname])'语句?在我看来,它应该只与第二个'where(“id!=:id”,id:current_user.id)'语句一起工作。 –

+0

是的,我添加了它,因为你在你的问题中有这样的陈述,但它没有它。 – markets

+0

啊,是的,当然(累了让我忽略了这个事实!)感谢您的帮助! –