如何从一个拙劣的ActiveRecord模型重命名中恢复



我创建了一个Rails模型(和控制器),名称中有一个错别字。我将所有文件重命名为正确的名称,然后回滚用于创建表的迁移,并对其进行更改,以使用正确的名称重新创建表。

不幸的是,ActiveRecord仍然希望使用旧的表名,即使它没有出现在我的项目中的任何文件中。我认为它已经缓存到某个地方,但我不知道在哪里。在应用程序的tmp目录下没有可疑的文件。

目前,我在模型中添加了一个对"set_table_name"的调用来解决这个问题,但是我真的很好奇旧表名存储在哪里以及如何摆脱它。

更新:我继续使用"rails destroy scaffold"删除了scaffold。当我重新创建它时(没有错别字),它重新创建了所有有错别字的东西!我知道错别字缓存在某个地方,但我不知道在哪里

Rafe -看起来这可能是Rails的一个bug。也许你可以提交一个Rails拉取请求,或者尝试添加到配置/初始化/变形。rb文件。

你确定了模型的类名了吗?Rails从

中推断出表名

。"class Userr" -> " users "

我通常会很快发现拼写错误:在控制台或关联中第一次提到模型;路由中的控制器。

当我rails generate model urser时,我只是rails destroy model urser并重新开始。

这只是将文件删除,但它非常方便,并且在rails 3中可以很好地销毁生成器创建的每个文件。

如果我在发现错别字之前迁移,我会让迁移被销毁脚本删除,让生成脚本写一个新的,然后rake db:rollback。这样就可以删除前一次迁移中的urser_table,并创建user_table

如果文件中有一些代码,那么此时大部分都在模型或控制器本身中。我只是在删除文件之前将类的内容复制到剪贴板中,并将其粘贴到下一个文件中。

如果在各种模型测试、控制器或helper文件中有很多代码:我仍然使用相同的方法,但在运行destroy之前将其提交到git,所以如果你有什么东西,它总是可以被检出。

好的,事实证明,在Rails 3(可能还有其他版本)中,如果您试图生成一个名为"Cafe"的模型,它将使用名称"cave"代替。不知道为什么。

这里有一个例子。我也在不同的电脑上复制了这个。

holloway:whatever rafeco$ rails g scaffold Cafe 
  invoke  active_record
  create    db/migrate/20110412190231_create_caves.rb
  create    app/models/cafe.rb
  invoke    test_unit
  create      test/unit/cafe_test.rb
  create      test/fixtures/caves.yml
   route  resources :caves
  invoke  scaffold_controller
  create    app/controllers/caves_controller.rb
  invoke    erb
  create      app/views/caves
  create      app/views/caves/index.html.erb
  create      app/views/caves/edit.html.erb
  create      app/views/caves/show.html.erb
  create      app/views/caves/new.html.erb
  create      app/views/caves/_form.html.erb
  invoke    test_unit
  create      test/functional/caves_controller_test.rb
  invoke    helper
  create      app/helpers/caves_helper.rb
  invoke      test_unit
  create        test/unit/helpers/caves_helper_test.rb
  invoke  stylesheets
  create    public/stylesheets/scaffold.css

最新更新