为什么我要在我的Heroku应用程序上安装NoMethodError,因为相同的代码在我的本地设置上运行得完美无缺?
该错误由以下代码触发:
@customer = Customer.find(1)
@customer.responses.create(:offer_id => '1', :digit => '2')该代码在本地服务器和本地Rails控制台上按预期工作。
但是,在Heroku上,上面的代码触发了NoMethodError:
NoMethodError (undefined method `responses' for #<Customer:0x7f7bcbee3808>):响应模型通过belongs_to :customer绑定到客户模型。
此外,我可以登录到Heroku控制台并运行它,没有任何问题:
Response.create(:offer_id => '1', :customer_id => '1', :digit => '2')那么,如果上述两种版本在我的本地机器上都能正常工作,为什么关联会在Heroku上失败呢?
--
运行Rails 3.0.6并在Heroku Ruby 1.8.7和Ruby 1.9.2上进行测试
在Heroku和我的本地框上数据库是相同的。
发布于 2011-04-07 03:07:20
通常,当这样的东西不起作用时,它表示您缺少了一个has_many关联。如果您希望访问和belongs_to,则需要同时定义它们--belongs_to和has_many。
听起来,如果它在您的本地机器上工作,而不是Heroku,那么这将是因为您没有将更改推送到Heroku服务器并在那里重新启动控制台。请确保您已按下更改,然后再试一次。
发布于 2011-04-07 13:33:35
马可,我想了一下,我有几个猜想让你试试。在进行上述任何一项操作之前,请重新启动应用程序。有时候这会创造奇迹。
heroku restart好吧,现在,试着在控制台里
@customer.responses那会有什么回报?我想应该是[]吧。也许对此做一些检查等,可以给我们提供一些见解。如果您手动构建和关联一个响应,您能让它显示出来吗?
其次,您的无方法错误是在responses上,而不是在create上,所以您在此之后键入的内容可能并不重要,但是,您的offer_id和digit字段是整数吗?如果是的话,尝试使用整数而不是字符串来创建它们。与MySQL或SQLite相比,MySQL是如此脆弱,许多问题可以追溯到我在开发Heroku之前不熟悉Postgre。
@customer.responses.create(:offer_id=>1,:digit=>3)这可能不重要,但值得一看。
检查的另一件事是所有的回调和验证等等。有什么失败了吗?这似乎与此无关,但我以前也曾遇到过一些问题,因为在我忽略的回调中,似乎出现了微小的无声失败,所以事情变得非常奇怪。我相信您正在进行测试,但是如果您在此模型中的任何地方都有较浅的测试覆盖率,那么不妨利用这个bug搜索来增强它:)
同情的错误,我不知道这些是否会有帮助,但祝好运!如果Heroku的工作人员发现了这个问题,请发帖子,我很有兴趣从中学习!
发布于 2011-04-07 01:40:53
我认为你的问题在于你是如何做出反应的:
@customer.responses.create(:offer_id => '1', :digit => '2')你可能想试试这个。
Response.create(:offer_id => '1', :digit => '2', :customer_id => 1)https://stackoverflow.com/questions/5574697
复制相似问题