【问题标题】:Rails 4: Removing a column from a table raises NoMethodErrorRails 4:从表中删除列会引发 NoMethodError
【发布时间】: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


【解决方案1】:

我认为你的Zombie 模型中有一个attr_accessible :age。

attr_accessible :age

从您定义该属性的模型和所有视图中删除该属性。如果您的模型中有任何年龄方法,也请删除该方法。希望它会有所帮助。谢谢。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-08-08
  • 1970-01-01
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
  • 2012-04-29
  • 1970-01-01
  • 2018-09-22
相关资源
最近更新 更多