Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.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 一次循环通过2个模型对象_Ruby On Rails_Ruby_Iterator_Mysql2 - Fatal编程技术网

Ruby on rails 一次循环通过2个模型对象

Ruby on rails 一次循环通过2个模型对象,ruby-on-rails,ruby,iterator,mysql2,Ruby On Rails,Ruby,Iterator,Mysql2,我有一个用户对象,通过简单调用公开: @users = User.all 我还有一些更昂贵的查询,我正在使用自定义SQL生成结果 @comment_counts = User.received_comment_counts 这个调用和其他类似的调用将返回对象,在我的列表中,每个用户有一个按id排序的元素 在我看来,我希望同时遍历用户和comment\u counts对象。例如: for user, comment_count in @users, @comment_counts do end

我有一个用户对象,通过简单调用公开:

@users = User.all
我还有一些更昂贵的查询,我正在使用自定义SQL生成结果

@comment_counts = User.received_comment_counts
这个调用和其他类似的调用将返回对象,在我的列表中,每个用户有一个按id排序的元素

在我看来,我希望同时遍历用户和comment\u counts对象。例如:

for user, comment_count in @users, @comment_counts do
end
我不知道该怎么做。我似乎也不知道如何从@comment\u counts结果中获取单个记录,而不通过@comment\u counts.each运行它


是否有一些方法可以为这些lits对象中的每一个构建迭代器,将它们转储到while循环中,并在循环的每个过程中分别步进迭代器?另外,如果您能回答这个问题,我可以去哪里学习如何单步执行rails中的列表。

假设数组具有相等的值:

在控制器中:

@users = User.all
@comments = Comment.all
在你看来

<% @users.each_with_index do |user, i |%>
    <% debug user %>
    <% debug @comments[i] %>
<% end %>


如果不知道数组中是否有相同数量的对象,则只需检查
@comments
上是否存在这些值

像这样的东西应该适合你:

@users.zip(@comment_counts).each do |user, comments_count|
  # Do something
end

我从未在Ruby中遇到过对迭代器的手动操作,更不用说这是不可能做到的。这样的代码可能会很混乱,因此我可能会倾向于更优雅的解决方案。

这并不明显,因为您的数据需要进行一些重构<代码>注释计数显然属于
用户
的实例,应该反映这一点,以便只需要在一个集合(用户的集合)上循环。我可以想出两种可能的方法来实现这一点:

  • 。仅适用于关联模型,此处可能不适用。例如,您的每个用户都有
    注释
    ,因此编写
    User.includes(:comments)。all
    将返回所有用户及其注释,并且只执行两次查询以获取数据

  • 为了计算每个用户的评论,您可以使用。然后,在
    users
    表中还有一个字段用于缓存用户的注释数量。同样,仅适用于关联的
    注释


  • @comment_counts是一个Mysql2::Result,因此我得到了错误-无法将Mysql2::Result转换为数组。不过这真的很有趣。啊,你需要先从
    @comment\u counts
    的查询结果中获取数据。如果您不熟悉,这里有一个例子:这就成功了,rubydoc.info引用非常有用,谢谢!