【发布时间】:2013-08-05 13:29:44
【问题描述】:
我正在学习 Rails for Zombie 2 课程。我创建了一个包含几列的 Zombies 表,其中一列是整数类型的“年龄”。
我运行这两个命令:
rails g migration RemoveAgeFromZombies age:integer
rake db:migrate
之后,例如,当我尝试索引僵尸时,我得到一个 NoMethodError,与年龄列相关:
undefined methodage' for #Zombie:0x356c700>`
这是否意味着当我从表中删除一列时,我需要手动从所有引用它的文件中删除代码?
【问题讨论】:
-
是的,这意味着您必须检查您的项目并删除在 Zombie 对象上调用此
.age方法的所有行。当引发类似“#Zombie:0x356c700> 的未定义方法”这样的错误时,您可以查看错误的完整跟踪以了解调用此方法的位置。 -
嗯,这很奇怪。当这样一件微不足道的事情自动为您处理时,这不是典型的 Rails 方式。无论如何,谢谢。
-
通常不去掉模型的属性。如果你这样做了,那主要是因为你犯了一个错误,所以这样做很痛苦是可以理解的。
-
如果您只是使用通过内省自动构建列/字段的脚手架,那将是
typical rails way(无论如何)。但是,如果您硬编码对某个字段的引用,然后删除该字段,则需要删除这些引用。 Rails 并不神奇,它不会为您编辑代码:) -
我搜索了“.age”,在 3 个文件中找到了 4 个匹配项。我删除了它们,并认为我没问题。然而,在那之后,我搜索“年龄”,现在在 15 个文件中有 29 个匹配项...... :(
标签: ruby-on-rails database rake