Rails:在sqlite中更改数据后,查询结果不会更新

时间:2013-10-09 09:05:20

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

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


<行为>

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

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

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

  

@members = Member.order(“number”)

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


<我尝试了什么>

我尝试过以下行动:

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 console上编写了以下代码:

  

重载!

没有任何改变。


<问题>

问题是:

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

2)铁轨保持在哪里&添加没有数据库的数据以及如何添加?

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

2 个答案:

答案 0 :(得分:1)

尝试:

Member.connection.clear_query_cache

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

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

答案 1 :(得分:0)

我认为你没有以正确的方式恢复数据。尝试使用以下代码而不是@members = Member.order(“number”)

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

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

希望它有所帮助。