【问题标题】:Rails: query results are not updated after changing data in sqliteRails:在sqlite中更改数据后查询结果不更新
【发布时间】:2013-10-16 13:05:45
【问题描述】:

我是使用 Ruby on Rails 开发的新手,在创建 Web 应用程序时遇到了一些问题。


1) 我创建了一些种子数据。

2) 然后我在控制台上尝试了 db:reset。

3)我发现虽然数据库(sqlite)中的数据正确更新,但视图仍然没有变化。我在控制器中写的内容如下:

@members = Member.order("number")

4) 然后我通过我的网络应用程序添加了一些额外的数据(这次不使用控制台),发现数据显示在视图页面的列表中,尽管数据没有添加到数据库中。


我尝试了以下操作:

1)我也试过在数据库中写SQL,结果是一样的(正确插入数据库但没有显示在视图页面上)。

2) 我重新启动了 httpd(我正在使用 Passenger )并且没有任何变化。

3) 我添加了 Member.reload / Member.reset_column_information,如下所示:

Member.reload
@members = Member.order("number")

编写此代码后,更改仅在第一次反映。

4) 我发现覆盖/model/目录下的文件后,更改会反映在视图页面上。

5) 我将 config/environments/development.rb 设置如下:

config.cache_classes = false

没有任何改变。

6) 我在 Rails 控制台上编写了以下代码:

重新加载!

没有任何变化。


问题是:

1) 为什么会发生这些奇怪的行为?

2) Rails 在没有数据库的情况下在哪里保存和添加数据以及如何保存和添加数据?

3) 有没有办法在通过 rake db:reset 更改数据库后自动将更新反映到视图中?

【问题讨论】:

  • “视图中的数据没有改变”到底是什么意思?

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


【解决方案1】:

试试:

Member.connection.clear_query_cache

发生这种情况的原因是模型具有其内部 SQL 缓存系统,这有助于避免多次调用某些查询。

一般来说,它非常智能,可以选择通过ActiveRecord 所做的更改,但无法选择外部进程(控制台)所做的更改。

【讨论】:

  • 感谢您的详尽解释。我第一次添加您的示例代码时效果很好,但下一次尝试(更改种子数据并输入 db:reset )离开 clear_query_cache 代码,再次没有任何变化......
  • 因为第一次运行它,它设法再次缓存结果,第二次没有进入数据库。如果你想让 rails 去数据库进行所有查询,试试Member.connection.disable_query_cache!
  • 感谢您的回复。现在我可以理解问题在于缓存系统。我还将检查rails缓存系统的实现。
【解决方案2】:

我认为您没有以正确的方式恢复数据。试试下面的代码,而不是 @members = Member.order("number")

@members = Member.find(:all, :order => "number")

您应该在执行 rake db:reset 后看到更新,因为 rake db:seed 任务会在您进行 db 重置时自动调用。

希望对你有帮助。

【讨论】:

  • 第一次尝试时视图已更改(更改种子数据并键入 db:reset ),但之后视图没有更改...是否因为查询结果被缓存?无论如何,感谢您的帮助。
  • 您是否确认数据已写入您的数据库?也许错误是数据保存在控制器中的方式。您应该阅读日志(日志目录)以查看已完成的操作。此外,请检查您的模型文件,看看您是否对要保存的信息有任何限制。 (如果有帮助,请给答案投票:))
  • 感谢您的回复。我将立即检查日志数据。真的很抱歉,系统说“投票需要15个声望”所以我不能投票...(实际上我昨天刚刚注册了stackoverflow)但是我真的很感谢你。
  • 别担心 :) 我也会尝试使用内置的 rails 服务器来查看问题是否与您的 Apache 服务器有关。您可以使用“rails server”启动它。
  • 谢谢。我刚刚尝试过“rails server”而不是Passenger(因为我使用的是VPS,所以我通过apache使用了反向代理)。但是行为仍然没有改变......我会再次仔细检查,如果我有一些解决方案,我会立即告诉你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-27
  • 2014-01-18
相关资源
最近更新 更多