我遇到了一个奇怪的问题,标记在我的开发计算机上工作正常,但是当我部署到生产服务器时,我在日志中收到此错误:
ActionView::TemplateError (undefined method `tags' for #<Person:0x98bb9d4>) on line...
production.log文件中有一个条目表明has_many_polymorphs已加载,因此它不像插件在生产机器上不可用。
我的Google-fu试图找到答案让我失败了,所以如果有人知道什么是错的,我们将不胜感激!
编辑:我应该提到在生产和开发上我使用相同的数据库。我下载了生产的一个,并在开发机器上使用它,它工作正常。
答案 0 :(得分:0)
上限部署:迁移
答案 1 :(得分:0)
我已经看到类似的问题,其中多态类型字段没有被正确填写,或者在添加多态类型标记之前存在一些现有数据。人是子类吗? _type字段是否包含多态表上的任何空值?
答案 2 :(得分:0)
这里只是在黑暗中刺伤,但has_many_polymorphs本身并没有为你的模型添加标记功能。相反,您使用生成器创建一个标记扩展模块,该模块进入lib / tagging_extensions.rb。模块文件具有辅助方法,可以在has_many_polymorphs基本功能的基础上添加标记功能。
那么,您是否可以安装插件,而不是标记扩展文件?
答案 3 :(得分:0)
我花了一些时间与一位顾问追踪这一点,最后我们发现由于原因未知,标记内容没有被加载。
通过在environment.rb的末尾添加一行代码(仅三个字母),它就被解析了。我评论它,以便我们永远不会忘记wtf正在进行:
# Magic begins here.
# We need to force Rails to load the Tag record, or
# has_many_polymorphs doesn't work properly. I don't know
# if there's a better fix, but this one seems reasonable. :-/
Tag
就是这样。我确信这是一个优雅和正确的解决方案,但这是有效的。怪异。
我希望这可以帮助那些人。