为什么这个多线控制台块不能在Rails 3中运行?

时间:2010-11-06 01:02:16

标签: ruby-on-rails

我正在尝试在Rails 3控制台中运行它,但是当我这样做时,没有任何反应。它出什么问题了?谢谢你的阅读。

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

编辑:

应该是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 个答案:

答案 0 :(得分:1)

正如monocle指出的那样,你不会在这里获得任何输出,因为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

答案 1 :(得分:0)

我正在尝试使用Rails 3.0.1和Ruby 1.9.2

尝试打印出save的结果,看看是否属实。难道你的user_id需要是唯一的吗?看起来你的user_id不是表的主键......但是它可以是二级密钥吗?还可以尝试其他字段,看看它是否有效。

答案 2 :(得分:0)

我认为使用这样的分号会抑制输出。试试这个

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

我没有得到任何输出。但是接下来

> @x
 => 6