我在名称中创建了一个输入错误的Rails模型(和控制器)。我将所有文件重命名为正确的名称,然后我回滚了用于创建表的迁移,并将其更改为使用正确的名称重新创建表。
不幸的是,ActiveRecord仍然希望使用旧的表名,即使它没有出现在我的项目中的任何文件中。我认为它已被缓存在某个地方,但我不知道在哪里。应用程序的tmp目录中没有看起来可疑的文件。
目前,我向模型添加了对“set_table_name”的调用以解决问题,但我真的好奇旧表名存储的位置以及如何摆脱它。
更新:我继续使用“rails destroy scaffold”删除了脚手架。当我重新创建它(没有拼写错误)时,它用错字重新创建了一切!我知道错字是在某个地方缓存但我不知道在哪里。
答案 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