Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 查询数组与活动记录关系_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Ruby on rails 查询数组与活动记录关系

Ruby on rails 查询数组与活动记录关系,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我怎样才能在这个问题上调用all?我想对查询返回的所有通知调用check\u other\u notification方法 有人能就这个活动关系与数组主题提供一个好的描述吗?我在很多不同的地方都读到过,但我还是有点困惑 Notification .between_other_recipient(current_user, @user) .last .check_other_notification 据我所知,您希望对查询返回的每个对象调用check\u other\u notifi

我怎样才能在这个问题上调用
all
?我想对查询返回的所有通知调用
check\u other\u notification
方法

有人能就这个活动关系与数组主题提供一个好的描述吗?我在很多不同的地方都读到过,但我还是有点困惑

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

据我所知,您希望对查询返回的每个对象调用
check\u other\u notification
方法

如果是,请使用以下方法:

Notification
  .between_other_recipient(current_user, @user)
  .find_each do |notification|
    notification.check_other_notification
end
find_each
如果是非常有效的方法,因为它可以批量处理对象(默认批量大小为1000条记录,但您可以指定任何其他数量)

在您的情况下,
每一个
都会起作用,因为我不认为有成百上千的通知,但如果是这样的话-
查找每一个
都是完美的匹配


编辑
collect
find_each
之间的差异

find_each
上引用文档:

find_each
仅用于批量处理大型 无法同时存储在内存中的记录数量。如果你 只需要循环少于1000条记录,可能会更好 只是使用常规的find方法

如果使用数组类中的方法
collect
map
),它将首先将整个记录集合加载到内存中,然后再进行处理。当收集量很大时,这会消耗大量内存并导致问题

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


展示了几个使用Array的vs AR方法的示例,并描述了查询AR集合时需要注意的一些其他事项。

Andrey,是的,我想在每个对象上调用它。所以我应该在控制器中使用这个,对吗?还有一个问题。我读到了collect方法,它也有类似的功能。你能简单地告诉我find_each和collect之间的区别吗?Andrey,你能告诉我一个sby调用ruby而不是SQL/active record时“避免”的例子(如果上面的代码中有可能的话)?除此之外,你知道一个很好的资源,在那里我可以阅读一些关于这些的比较(ruby与ActiveRecord与sql)。如果读取每个对象上的单独资源,则很难想象何时使用哪一个。本例中使用Ruby的示例如下:
Notification.between\u other\u recipient(..).all.map(&:check\u other\u Notification)
-整个集合在开始实际调用每个对象上的方法之前加载到内存中。我现在在用电话,所以不能真正上网-如果我明天早上找到好文章-我会更新答案并通知你我只是想插话回复:
each
vs
map
vs
reduce
。它们都将遍历一个可枚举/数组,但对不同的事情很有用:-每个都只遍历每个项目并运行您指定的任何代码。它返回原始的可枚举项-map将返回一个新数组,根据函数转换了每个项-reduce/inject将返回一个value@SzilardMagyar没有找到包含您要求的内容的大量信息,但我已更新了答案,并提供了一篇文章的链接,其中显示了一些需要了解的内容。祝你学习顺利。注:总是阅读文档,没有人比文档说得更好。