在Heroku控制台上运行循环或多行代码

ssc*_*rus 15 console ruby-on-rails heroku ruby-on-rails-3

Heroku控制台不会在我的应用程序中运行循环(虽然它们可以在我的本地计算机上运行而且heroku允许采取个别操作).

@companies.each do |c|
SyntaxError: /home/heroku_rack/lib/console.rb:150: syntax error, unexpected $end
@companies.each do |c|
                      ^
/home/heroku_rack/lib/console.rb:140:in `eval'
/home/heroku_rack/lib/console.rb:140:in `_eval'
/home/heroku_rack/lib/console.rb:73:in `block in process_command'
/usr/ruby1.9.2/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize'
Run Code Online (Sandbox Code Playgroud)

你知道为什么会出现这些错误吗?

Joh*_*non 29

这不是一个错误 - 它是Heroku让你通过heroku console命令与你的应用程序交互的一个特性- 虽然看起来像一个完整的控制台,它根本不是.每个行都通过http传输并在按Enter键时进行评估,因此您无法实际使用多行命令,但这样可以正常工作;

User.all.each {|user| user.update_attributes(:active => true) }
Run Code Online (Sandbox Code Playgroud)

如果它不能写在一行上,你需要使用rake任务或类似的东西

编辑:包含正确的语法

  • @sscirrus - 在您喜欢的编辑器中编写多行代码,然后用';'替换换行符,并将结果粘贴到控制台中.示例:`User.all.each do | user |; newname = user.name +"new"; 放新名字; end` (6认同)
  • 你也可以使用分号";" 在一条物理线上写多行代码. (2认同)

iwa*_*bed 6

适当的语法是(至少对于Heroku上的Ruby 1.9.2):

User.all.each {|user| user.update_attributes(:active => true)}
Run Code Online (Sandbox Code Playgroud)

使用John的方法对我来说不起作用(我第二次遇到这个问题所以是时候写一个适合其他人的答案).

顺便说一句,如果你想要多行代码,你必须将它全部作为一行传递,如下所示:

User.all.each {|user| user.some_attribute = true; user.some_other_attribute = false; user.save }
Run Code Online (Sandbox Code Playgroud)