没有在ActiveRecord_Relation上输入块

时间:2019-05-17 15:48:06

标签: ruby-on-rails ruby

我是Ruby和RoR的新手。

我有一个看起来像这样的类方法:

def self.show_all_expired
  puts "\r\n COUNT: #{self.expired.all.count}\r\n"
  self.expired.all do |s|
    puts "\r\n COUNT: #{s}\r\n"
  end
  puts "\r\nEND\r\n"
end

当我从控制台运行它时,得到以下输出:

enter image description here

如您所见,订阅集合没有被迭代,并且块主体根本没有被输入。但是查询数为31,因此必须有记录。为什么do块未执行?

1 个答案:

答案 0 :(得分:1)

查看文档,您会发现all不会受到阻止。它只是返回ActiveRecord :: Relation范围对象。

相反,您想使用each,它对行集合中的每个元素调用一次给定的块:

self.expired.each do |s|
  puts "\r\n Subscription: #{s.inspect}\r\n"
end

如果要处理大量记录,则为find_each