2015-06-02 3 views
0

Когда я пытаюсь просто сделать ваниль find_each, он продолжает возвращать nil, хотя есть объекты/записи, над которыми он должен действовать.Почему find_each не возвращает фактический объект AR?

[28] pry(main)> Node.find_each do |node| 
[28] pry(main)* end 
    Node Load (1.0ms) SELECT "nodes".* FROM "nodes" ORDER BY "nodes"."id" ASC LIMIT 1000 
=> nil 
[29] pry(main)> Node.all.find_each do |node| 
[29] pry(main)* node 
[29] pry(main)* end 
    Node Load (0.7ms) SELECT "nodes".* FROM "nodes" ORDER BY "nodes"."id" ASC LIMIT 1000 
=> nil 
[31] pry(main)> Node.count 
    (0.5ms) SELECT COUNT(*) FROM "nodes" 
=> 2 
[32] pry(main)> Node.find_each do |node| 
[32] pry(main)* puts node 
[32] pry(main)* end 
    Node Load (0.5ms) SELECT "nodes".* FROM "nodes" ORDER BY "nodes"."id" ASC LIMIT 1000 
#<Node:0x007fd49ffbc680> 
#<Node:0x007fd49ffbc388> 
=> nil 

Как получить find_each просто вывести все объекты для этой модели так же, как Node.all делает и почему это только выход, что кажется, как ID объекта AR для каждого узла, только когда я делаю puts node ?

[35] pry(main)> Node.all 
    Node Load (0.4ms) SELECT "nodes".* FROM "nodes" 
=> [#<Node id: 85, name: "House Fire 2", family_tree_id: 57, user_id: 57, media_id: 228, media_type: "Video", created_at: "2015-05-15 00:20:26", updated_at: "2015-05-20 01:06:34", circa: nil, is_comment: nil, cached_votes_total: 0, cached_votes_score: 0, cached_votes_up: 0, cached_votes_down: 0, cached_weighted_score: 0, cached_weighted_total: 0, cached_weighted_average: 0.0>, 
#<Node id: 86, name: "10PP Form Video", family_tree_id: 57, user_id: 57, media_id: 229, media_type: "Video", created_at: "2015-05-15 01:26:28", updated_at: "2015-05-22 20:35:58", circa: nil, is_comment: nil, cached_votes_total: 1, cached_votes_score: 1, cached_votes_up: 1, cached_votes_down: 0, cached_weighted_score: 1, cached_weighted_total: 1, cached_weighted_average: 0.0>] 

ответ

4
> Node.find_each do |node| 
> end 
=> nil 

В этом случае, ноль от определения этого блока; а не результат Node.find_each.

Попробуйте напечатать что-то в блоке следующим образом:

> Node.find_each do |node| 
> puts node.id 
> end 

Это напечатает 2 идентификаторами.

Чтобы распечатать все объекты:

> Node.find_each do |node| 
> puts node.inspect 
> end 
+0

Ок 'node.inspect' работал. Но как бы тогда я назначил результаты всего блока переменной? например Я хотел бы установить 'nodes = Node.find_each do ....'. Как я могу это сделать? – marcamillion

+0

Не делает ли 'Node.all' то, что вы хотите? Убедитесь, что вы используете 'find_each' для правильной цели: http://api.rubyonrails.org/classes/ActiveRecord/Batches.html#method-i-find_each –

+0

Ну, я стараюсь, по-своему, загружать все объекты из этой модели в моей БД в переменную. Мне нравится идея делать это партиями, а не просто ванильным '.all' дампом. Вот почему меня привлекли к '.find_each'. – marcamillion