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
答案 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