我有一个必须使用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调用中收到的数组中减去单个记录?
答案 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)