我创建了一个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