重命名模型和表后,has_many方法不起作用

时间:2015-09-24 20:49:08

标签: ruby-on-rails ruby

我有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。我运行了迁移,我重新启动了服务器。我错过了什么?我做了一件坏事吗?

2 个答案:

答案 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?

  • db:migrate 运行尚未运行的(单个)迁移。
  • db:reset 执行db:drop,db:setup