【问题标题】:Why is Rails runner not returning a result?为什么 Rails runner 不返回结果?
【发布时间】:2014-10-23 02:23:51
【问题描述】:

我遇到了 Rails 跑步者的问题。当我尝试使用 if 时,即使是通过命令行,它什么也没做!它不显示错误消息,也不显示操作结果。

例如,如果我尝试

rails runner Credit.count

定义了模型Credit,方法算作

Credit.first.update_attribute(:estado, "En proceso")

甚至更简单的任务,跑步者什么都不做!

我试过说环境就是发展,但没有任何作用。有没有人有任何见解?我做错了吗?

编辑:我在看数据库,就是这个问题,没有更新。我将第一个元素的“estado”列的值更改为“En proceso”以外的其他值,但是,无论我使用跑步者多少次,数据库都没有显示任何变化。

【问题讨论】:

  • 如果你尝试其他 rails 控制台命令(如rails console),一切都很好?
  • 尝试这样做:rails runner "puts Credit.count"
  • rails 控制台工作。 Puts 不会在控制台中打印任何内容。

标签: ruby-on-rails ruby runner


【解决方案1】:

rails runner:runner 在 Rails 上下文中以非交互方式运行 Ruby 代码

update_attribute:只返回true或false,如果要输出结果,可以使用“puts”或“p”。

例如,

$ rails r "User.first" #no output, even it will return a user object
$ rails r "puts User.first" # you can use "puts" get the output
#<User:0x007f8a2c76e608>

【讨论】:

  • 也可以。但是,将相同的代码放在模型 Credit 上并使用 rails r 调用它不会。
【解决方案2】:

如果你刚刚在控制台中写了Credit.first.update_attribute(:estado, "En proceso"),你不应该有结果,但是你可以在数据库中看到结果,为了检查update_attribute是否真的更新它你可以写成update_attribute!你也可以写:

p Credit.first.update_attribute(:estado, "En proceso") 应该将 truefalse 打印到控制台

【讨论】:

  • 问题是,数据库没有更新,我正在更新的表没有变化。
  • 即使你写了p 'hello world'这样的东西,你在控制台中没有它?
【解决方案3】:

原来我是个白痴。

首先我得改方法名,调用Credit.count调用默认的count方法,所以我改成了myMethod。

之后,我就可以使用 puts 函数并轻松更新数据库了 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 2013-03-10
    • 2019-01-14
    • 1970-01-01
    相关资源
    最近更新 更多