Heroku上的RoR:为什么ModelOne.count仅在生产中不能在ModelTwo中运行?

时间:2018-05-12 08:48:46

标签: ruby-on-rails heroku

我自己的电脑:MacOS

制作:Heroku

应用程序:与MySQL数据库的RoR(在本地和生产中正确设置)

ModelTwo has_many ModelOne

ModelOne belongs_to ModelTwo

ModelTwo使用self.model_one.any?做出决定

在开发和测试(RSpec)环境中,这很好,100%正常。

在制作(Heroku)中,self.model_one.any?始终返回false

执行heroku run rails c一切顺利进行。我可以看到记录,将完全相同的调用作为我的代码(字面意思是从Atom到控制台的cmd + c cmd + v),这一切都像它应该的那样。我应该true truefalse false

应用程序不会崩溃,因为它不是一个关键的决定,但最终会使用性能要求更高的块,这正是我希望通过创建来避免的这是有条件的。

我一直试图弄清楚这一点,所以我做的其中一件事就是在所有地方放置puts语句,跟踪每一次更改/保存到ModelOne以及如何ModelTwo在每个点获取数据。

事实证明,ModelTwo似乎对ModelOne完全视而不见。 self.model_one.any?不仅始终返回false,而且ModelOne.count始终返回0。即使rails c正确读取它,应用程序中的其他模型和控制器也可以这样做!

同样,这只发生在Heroku制作中。

开发是100%好的!我在浏览应用时看到rails s时就知道了。我的所有puts语句都显示了数据和模型的正常运行。

测试100%正常!我确保我的RSpec ModelTwo测试专门测试了这个决定并且它通过了!

什么事?我错过了什么?

1 个答案:

答案 0 :(得分:0)

Rails有不同的环境。每个环境都有不同的数据库。如果您在开发或生产数据库中有记录,则它们不存在于测试数据库中。 所以rails c会产生不同的结果。 没有代码示例很难分析,但我认为您有验证错误,请检查model_one_entity.errors

我会假设控制器强参数出现问题,但是如果你有ModelOne.count零,那么它根本不会创建它,所以你需要检查验证。或使用create!save!方法代替createsave