gpt4 book ai didi

ruby-on-rails - 查询数组到。事件记录关系

转载 作者:数据小太阳 更新时间:2023-10-29 08:03:17 25 4
gpt4 key购买 nike

我怎样才能调用all之类的东西呢?我想对查询返回的所有通知调用 check_other_notification 方法。

有人可以就这个 Active Relation vs array 主题提出一个好的描述吗?我在许多不同的地方读到过它,但我仍然有点困惑。

Notification
.between_other_recipient(current_user, @user)
.last
.check_other_notification

最佳答案

据我了解,您想对查询返回的每个对象调用 check_other_notification 方法。

如果是这样,请使用 find_each为此:

Notification
.between_other_recipient(current_user, @user)
.find_each do |notification|
notification.check_other_notification
end

find_each 如果是非常有效的方法,因为它分批处理对象(默认情况下,批处理大小为 1000 条记录,但您可以指定任何其他数量)。

在你的情况下 each 会起作用,因为我认为没有成千上万的通知,但如果是这样的话 - find_each 是一个完美的匹配。


编辑

collectfind_each 的区别。

find_each 上引用文档:

find_each is only intended to use for batch processing of large amounts of records that wouldn’t fit in memory all at once. If you just need to loop over less than 1000 records, it’s probably better just to use the regular find methods.

如果您使用 collect (map),它是 Array 类中的一个方法 - 它会在处理之前首先将整个记录集合加载到内存中。当集合很大时,这会占用大量内存并导致问题。

重要的一点是:不要使用 Ruby 来处理数据库的东西,当可以使用 ORM 时(否则,SQL 可以)。

Here is a short article展示了几个使用 Array 的方法与 AR 的方法的例子,还描述了查询 AR 集合时需要注意的其他一些事情。

关于ruby-on-rails - 查询数组到。事件记录关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34142563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com