Rails 3 - 如何使用单个异常执行find_all_by(从结果数组中删除单个记录)?

时间:2013-05-23 15:54:11

标签: sql ruby-on-rails arrays activerecord conditional-statements

我有一个必须使用find_all_by的情况;我有一个cookie会话哈希,其大小有限(4kb),所以不是存储我自己需要的记录,而是只存储数组中的ID。因此,find_all_by允许我直接在Model / Class上找到那些记录。如,

@data = Data.find_all_by_id(session[:search_results])

但是我需要从此列表中删除当前正在查看的搜索结果。

通常我可以做一个

find (:all, conditions: ["id != ?", current_user.id])

但是由于find_all_by将ActiveRecord查询作为数组返回,并且似乎不支持这样的条件,我对最佳方法有点困惑。

此外,我不能做一个数组差异()(例如@data - @current_user),其中@ current_user是一个AR对象,因为它不能在数组与AR对象上做差异(我是否可能将AR对象转换为数组并走这条路线?)

如何从我从Class.find_by_all调用中收到的数组中减去单个记录?

2 个答案:

答案 0 :(得分:1)

您可以使用ActiveRecord where方法。它返回ActiveRecord::Relation对象,您可以将find方法连接到。

@data = Data.where(id: session[:search_results])
@data.find(current_user.id)

它只发出一个DB请求。

答案 1 :(得分:0)

试试这个:

@data = Data.where("id in (?) AND id != ?", session[:search_results], current_user.id)