Rails find_each方法在控制台上返回nill?

时间:2017-07-15 04:36:38

标签: ruby-on-rails

User.find_each do |user|
  user.name
end

输出:

User Load (0.9ms)  SELECT  `users`.* FROM `users`  ORDER BY `users`.`id` ASC LIMIT 10000
=> nil

我的用户表中有记录,但它总是返回nill

2 个答案:

答案 0 :(得分:1)

这是因为你没有对该块做任何事情!在控制台中,它打印出find_each的返回值,而不是像你期望的那样打印出块内发生的事情。

您可以通过将块指定给变量并打印:

来观察此情况
result = User.find_each do |user|
  user.name
end
puts result  # => nil

相反,您想要做的就是在您的区块内采取行动。例如,您可以打印用户名称:

User.find_each do |user|
  puts user.name
end

或者在您的情况下,听起来您正在尝试收集所有用户名,因此您可以执行以下操作:

results = User.all.map do |user|
  user.name
end

这会将所有用户名返回results。如果您拥有大量用户,这不是非常有效并且不是一个好的长期解决方案,但是因为您刚开始探索它的工作原理比让事情100%正确更重要;)

答案 1 :(得分:0)

这是因为您没有在控制台上打印任何内容。 它不是一个以活动记录的形式显示任何结果的查询。这样做

User.find_each do |user|
 puts user.name
end