【问题标题】:Rails 3 console and db:console are differentRails 3 控制台和 db:console 不同
【发布时间】:2012-10-22 10:17:23
【问题描述】:

我有一个 rails 应用程序,当我同时打开控制台和 db:console 时,它​​们对于应该是相同的字段具有不同的值。我正在使用发送函数来更改值。这是模型中的方法:

  def toggle_approve(field)
    self.send(field)
    if(self.send(field).blank?)
        self.send(field + '=', "new_value")
        puts self.send(field)
    else
        self.send(req + '=', "")
    end
    rank.save
  end

在我的 db:console (sqllite) 中,一切总是正确的,但在我的常规 erb 控制台中却是错误的。然后,我的视图将显示 erb 控制台中的内容,而不是 sqllite。我不明白背景中发生了什么会导致这个问题。任何帮助都会很棒。

【问题讨论】:

  • 看不清楚。但是,尝试删除现有表中的数据,然后重试。有时,它会给出不同的值。

标签: ruby-on-rails-3 sqlite activerecord


【解决方案1】:

从您提供的详细信息中很难确定,但我认为您的视图使用的是过时版本的数据。尝试在更新之后和演示之前对更新的记录调用.reload。看看这是否能解决您的问题。

【讨论】:

  • 你是对的,但视图如何基于这样的移动目标?我们如何针对它进行调试?有没有办法让视图基于后台数据库而不是控制台中的内容,或者有没有办法在每次调用后重新加载数据?
  • 这是MVC和绑定模式的区别。数据由控制器检索,它是需要更新视图的数据。您最好的选择可能是重新设计它,以便获得相同的功能,但不需要重新加载。如果你不能帮助它,那么确定你必须重新加载的情况,并在帮助程序或模型本身中自动化行为。
  • 是否有文档显示数据何时更新以及如何更新?我会重构它,但我想以最好的方式做到这一点?在 prod 应用程序中,它的工作方式与在 dev 中的工作方式相同吗?或者我在这里拥有的功能会在产品中发挥同样的作用吗?
  • 数据永远不会自动更新。但是,您可以创建一个静态方法来在类中注册一个实例,然后再创建一个静态方法来重新加载所有注册的实例。然后,您可以注册有问题的实例,并在控制台或您希望的任何位置调用您自己实现的 reload_instances 静态方法。
  • 另外我在想我可以只更新 UI,让 Ajax 请求飞起来,而不用担心它。后端工作正常,但 UI 正在缓存或其他东西。或者我可以使用uncached do ... end,这也可能有效。你怎么看?
猜你喜欢
  • 2013-11-28
  • 2011-06-20
  • 1970-01-01
  • 2011-06-22
  • 2012-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多