我自己的电脑: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
true
和false
false
。
应用程序不会崩溃,因为它不是一个关键的决定,但最终会使用性能要求更高的块,这正是我希望通过创建来避免的这是有条件的。
我一直试图弄清楚这一点,所以我做的其中一件事就是在所有地方放置puts
语句,跟踪每一次更改/保存到ModelOne以及如何ModelTwo在每个点获取数据。
事实证明,ModelTwo似乎对ModelOne完全视而不见。 self.model_one.any?
不仅始终返回false
,而且ModelOne.count
始终返回0
。即使rails c
正确读取它,应用程序中的其他模型和控制器也可以这样做!
同样,这只发生在Heroku制作中。
开发是100%好的!我在浏览应用时看到rails s
时就知道了。我的所有puts
语句都显示了数据和模型的正常运行。
测试100%正常!我确保我的RSpec ModelTwo测试专门测试了这个决定并且它通过了!
什么事?我错过了什么?
答案 0 :(得分:0)
Rails有不同的环境。每个环境都有不同的数据库。如果您在开发或生产数据库中有记录,则它们不存在于测试数据库中。
所以rails c
会产生不同的结果。
没有代码示例很难分析,但我认为您有验证错误,请检查model_one_entity.errors
。
我会假设控制器强参数出现问题,但是如果你有ModelOne.count
零,那么它根本不会创建它,所以你需要检查验证。或使用create!
和save!
方法代替create
和save