Почему этот многострочный консольный блок не работает в Rails 3? - PullRequest
0 голосов
/ 06 ноября 2010

Я пытаюсь запустить это в консоли Rails 3, но когда я это делаю, ничего не происходит. Что с этим не так? Спасибо за чтение.

Note.find_all_by_user_id(19).each do |a|; a.user_id = 1;a.save; end;

EDIT:

Должно быть, Note.find_all_by_user_id. Я изменил строку выше. Однако возникает та же проблема.

Note.find_all_by_user_id(19)
=> [#<Note id: 27, user_id: 19, text: "sample text", created_at: "2010-11-02 15:40:19", updated_at: "2010-11-02 15:40:19">, #<Note id: 28, user_id: 19, text: "sample text", created_at: "2010-11-05 21:40:16", updated_at: "2010-11-05 21:40:16">] 

Note.find_all_by_user_id(19).each do |a|; a.user_id = 1;a.save!; end;
nothing happens

Ответы [ 3 ]

1 голос
/ 06 ноября 2010

Как указал монокль, вы не получите здесь никакого вывода, потому что консоль IRB / Rails не возвращает ничего из блоков, вызываемых с использованием "подробного" синтаксиса do / end.

Что бы вы ни делали внутри блока, все равно это произойдет, но вы не получите никакого вывода от консоли. Если вы действительно этого хотите, вместо:

Note.find_all_by_user_id(19).each do |a|; a.user_id = 1;a.save; end;

попробуйте синтаксис фигурных скобок:

Note.find_all_by_user_id(19).each { |a| a.user_id = 1; a.save }

Подробнее о «философской» разнице между фигурными скобками и do / end можно посмотреть здесь: http://talklikeaduck.denhaven2.com/2007/10/02/ruby-blocks-do-or-brace

0 голосов
/ 06 ноября 2010

Я думаю, что использование таких точек с запятой подавляет вывод.Попробуйте это

> @x = 0
> [1,2,3].each do |a|; @x += a; end;

Я не получаю вывод.Но тогда

> @x
 => 6
0 голосов
/ 06 ноября 2010

Я пытаюсь использовать Rails 3.0.1 и Ruby 1.9.2

Попробуйте распечатать результат save и посмотреть, верно ли это.Может ли быть так, что ваш user_id должен быть уникальным?Похоже, ваш user_id не является первичным ключом таблицы ... но может ли он быть вторичным ключом?Также попробуйте другие поля и посмотрите, работает ли он.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...