【问题标题】:Heroku says attribute exists that doesn'tHeroku 说存在不存在的属性
【发布时间】:2014-07-18 16:45:41
【问题描述】:

我刚刚成功部署,并运行了迁移。现在我看到了这个错误。

ActiveRecord::DangerousAttributeError (update is defined by Active Record):
app/controllers/project_updates_controller.rb:4:in `new'

我曾经在我的 Project_Updates 中有一个名为“update”的属性,但迁移将其重命名为“description”,因此这不再是问题了。为了确保迁移确实重命名了该列,我尝试创建一个新的 ProjectUpdate,如下所示:

irb(main):001:0> @projectUpdate = ProjectUpdate.new
=> #<ProjectUpdate id: nil, description: nil, project_id: nil, created_at: nil, updated_at: nil, deleted_at: nil, featured_image_id: nil, title: nil>

如你所见,没有“更新”方法,但有一个“描述”方法,所以它确实重命名了。

为什么我仍然收到此危险属性错误?附言这只是在生产中,而不是在开发中。

已解决

看起来我的数据库/模式可能不正确。我从 heroku 中提取,删除了我的方案,运行 db:migrate,然后推送,这解决了问题。

【问题讨论】:

  • 显示您的project_updates_controllerproject_updates 表单。
  • 永远不要将信息作为图片发布。你对此投了反对票,当你修复它时给我发消息,这样我就可以删除它。
  • 错误在project_updates_controller.rb第4行?
  • Michal,我删除了图片。我认为这些会比文本更有帮助,但显然不是。现在我知道不要在 stackoverflow 社区上发布图片。谢谢。

标签: ruby-on-rails activerecord heroku


【解决方案1】:

该错误基本上是由update 是预定义的ActiveRecord 方法引起的。这基本上意味着如果你调用@x.update,它是一个预定义的方法并且会抛出一个错误。 DangerousAttributeErrordocs 中的描述如下:

当属性具有 Active Record 保留的名称时引发(当 属性具有 Active Record 实例方法之一的名称)。

--

修复

您已通过迁移修复了db,但是,您的project_updates_controller 似乎仍在某处引用update“属性”。它提到它在line 4 上(在new 操作中)

要修复它,您应该将操作更改为引用 description 而不是 update

【讨论】:

  • 是的,我知道是更新导致了问题,这就是我将其更改为描述的原因。你是对的,它没有引用描述。我的问题是为什么?我进行了迁移,它应该可以很好地引用它。我能够通过从 heroku 中提取、删除我的架构、重新迁移、然后推送新架构来解决这个问题。架构中一定有问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-05
  • 1970-01-01
  • 1970-01-01
  • 2019-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多