0

为什么我会在我的Heroku应用程序上获得NoMethodError,当相同的代码在我的本地设置上完美地工作?Heroku上的Rails关联失败,但在本地框上工作?

错误是由该代码触发:

@customer = Customer.find(1) 
@customer.responses.create(:offer_id => '1', :digit => '2') 

该代码工作按计划我的本地服务器上,并在我的本地Rails的控制台。

然而,在Heroku上述代码触发NoMethodError:

NoMethodError (undefined method `responses' for #<Customer:0x7f7bcbee3808>): 

响应模型由belongs_to的方式绑在客户模型:客户

另外,I可以登录到Heroku控制台并运行该程序,没有任何问题:

Response.create(:offer_id => '1', :customer_id => '1', :digit => '2') 

因此,如果上述工作和两个版本都在我的本地框上正常工作,为什么会在Heroku上失败?

-

的运转轨道3.0.6并在Heroku的Ruby 1.8.7和Ruby 1.9.2

数据库测试是相同的在Heroku和我的本地框。

+0

是':belongs_to:customer'类型。应该是'belongs_to:customer' – s84 2011-04-07 01:05:55

+0

如果你使用R3,你应该使用Ruby> 1.9.1 – s84 2011-04-07 01:06:39

+0

@Sam为什么对于1.9.1的建议? RoR 3在1.8.7上有什么特别的问题? – Zabba 2011-04-07 01:11:22

回答

2

通常当这样的事情不工作表示你缺少一个has_many关联。如果您想访问它们,您需要定义belongs_tohas_many两侧的关联。

通过它的声音,如果它在你的本地机器上工作,但不是Heroku,那么这将是因为你没有将更改推送到Heroku服务器并在那里重新启动控制台。请确保您已推送更改并再次尝试。

+0

我不愿意承认它,但事实证明,这只是。我积极向上推送所有代码,但事实证明,这是我本地机器上的主服务器和服务器上的主服务器之间的提交差异。 Heroku的版本错过了这个关联。愚蠢的错误,但一个很好的教训,以检查基本知识之前的一切。 – Marco 2011-04-07 21:21:53

+0

它让我想起了大学编程课程中的一句古老谚语:如果您确定所有的代码都是正确的,但它仍然无法正常工作,那么您确定的一件事是正确的是错误的。 :-) – 2011-04-08 04:23:34

0

我觉得你的问题是你如何创建响应:

@customer.responses.create(:offer_id => '1', :digit => '2') 

你可能想,而不是尝试。

Response.create(:offer_id => '1', :digit => '2', :customer_id => 1) 
+0

第一个版本应该可以正常工作。事实上,它确实不在Heroku上。我的代码与此处发布的代码几乎完全相同:http://guides.rubyonrails.org/association_basics.html – Marco 2011-04-07 01:52:36

+0

另外,我在我的应用程序的其他部分为不同模型提供了非常类似的代码,它在Heroku上完美地工作,并且在我的本地服务器上。 – Marco 2011-04-07 01:54:30

1

Marco,我想了一下这个,我有几个猜测让你去尝试。在执行其中之一之前,请重新启动您的应用程序。有时候这会创造奇迹。

heroku restart 

好了,现在,尝试在控制台只是

@customer.responses 

那有什么回报呢?我认为它应该是[]。也许做一些检查等可以给我们在这里的见解。如果您手动构建和关联响应,您是否可以让它显示出来?

其次,你没有方法错误是responses,而不是create,所以无论你输入后可能并不重要,但,是你offer_iddigit领域的整数?如果是这样,请尝试使用整数而不是字符串来创建它们。与MySQL或SQLite相比,PostgreSQL非常脆弱,在Heroku上开发之前,我有很多问题可以追溯到我对Postgre的不熟悉。

@customer.responses.create(:offer_id=>1,:digit=>3) 

这可能没关系,但它值得检查。

要检查的另一件事是你所有的回调和验证等。是否有什么失败?这似乎没有什么关系,但是我之前遇到过问题,因为我忽略了一个回调中看似微小的沉默失败。我相信你在测试,但是如果你在这个模型的任何地方都有浅度测试,那么你可以使用这个bug追踪来加强它:)

对错误的同情,我不知道这是否有帮助,但祝你好运!如果Heroku员工发现问题,请发帖,我很乐意从中学习!

相关问题