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

时间:2011-04-11 04:51:03

标签: ruby-on-rails ruby activerecord

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

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

目前,我向模型添加了对“set_table_name”的调用以解决问题,但我真的好奇旧表名存储的位置以及如何摆脱它。

更新:我继续使用“rails destroy scaffold”删除了脚手架。当我重新创建它(没有拼写错误)时,它用错字重新创建了一切!我知道错字是在某个地方缓存但我不知道在哪里。

4 个答案:

答案 0 :(得分:1)

您修复了模型的类名吗? rails从中推断出表名

e.g。 “class Userr” - > “userrs”

答案 1 :(得分:1)

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

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

这只会破坏文件,但它非常方便,在rails 3中可以很好地销毁生成器创建的每个文件。

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

如果文件中有一些代码,那么主要是在模型或控制器本身。我只是在删除文件之前将该类的内容复制到剪贴板,然后将其粘贴到下一个文件中。

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

答案 2 :(得分:1)

Rafe - 看起来它可能是Rails中的一个错误。也许您可以提交Rails拉取请求,或尝试添加到config / initializers / inflections.rb文件。

答案 3 :(得分:0)

好吧,事实证明,如果您尝试生成名为“Cafe”的模型,那么使用Rails 3(可能还有其他版本),它将使用名称“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