0

我有一个必须使用 find_all_by 的案例;我有一个大小有限 (4kb) 的 cookie 会话哈希,因此我没有存储我自己需要的记录,而是将 ID 存储在一个数组中。因此, find_all_by 允许我直接在模型/类上找到这些记录。例如,

@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 调用中收到的数组中减去一条记录?

4

2 回答 2

1

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

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

它只发出一个数据库请求。

于 2013-05-23T16:00:38.007 回答
0

试试这个:

@data = Data.where("id in (?) AND id != ?", session[:search_results], current_user.id)
于 2013-05-23T16:10:01.487 回答