我有modelA,has_many modelBs
和modelB belongs_to modelA
。我试图将modelB的名称更改为modelC而不知道我在做什么。在我打电话给@modelA.modelBs
之前,我可以打电话给@modelA.modelCs
。我得到一个NoMethodError。这些是我尝试进行转换所做的事情:
我使用sqlite3迁移重命名了表:
def change
rename :modelBs, :modelCs
end
然后我更改了modelA,使其has_many :modelCs
并重新命名并修改了modelB.rb
(现在为modelC.rb
)并更改了类名,以便它class ModelC < ActiveRecord::Base
。它仍然是belongs_to :modelA
Rails无法找到调用ModelA实例的条形方法。当我@modelA.modelCs
时,我得到一个NoMethodError。我运行了迁移,我重新启动了服务器。我错过了什么?我做了一件坏事吗?
答案 0 :(得分:3)
迁移是否成功运行并且您的表实际上已重命名?我总是使用rename_table:
def change
rename_table :modelBs, :modelCs
end
在课堂上,您还可以告诉我们应该将模型与哪个表相关联,以便测试它是否正在查看正确的表格
class modelC < ActiveRecord::Base
table_name "modelCs"
end
希望有所帮助
答案 1 :(得分:0)
如果您执行$rake db:reset
会怎样? db:reset应该用所有种子数据重建数据库(没有迁移);也许检查一下,看看此时的依赖关系是什么样的,然后你可以运行$rake db:migrate
来运行迁移,看看你剩下的东西。你能提供更多关于你后端的信息吗?是Sqlite3吗?的PostgreSQL?