0

ローカルセットアップで同じコードが問題なく機能するのに、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によってCustomerモデルに関連付けられます

さらに、Herokuコンソールにログインして、これを問題なく実行できます。

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

したがって、上記が機能し、両方のバージョンがローカルボックスで正常に機能する場合、Herokuで関連付けが失敗するのはなぜですか?

-

Rails 3.0.6を実行し、HerokuRuby1.8.7およびRuby1.9.2でテスト済み

データベースは、Herokuと私のローカルボックスで同じです。

4

3 に答える 3

2

通常、このようなものが機能しない場合は、has_many関連付けが欠落していることを示します。両方にアクセスする場合は、関連付けのとサイドの両方を定義する必要があります。belongs_tohas_many

その音によると、ローカルマシンで動作しているが、Herokuでは動作していない場合は、Herokuサーバーに変更をプッシュして、そこでコンソールを再起動していないことが原因です。変更をプッシュしたことを確認して、再試行してください。

于 2011-04-07T03:07:20.147 に答える
1

マルコ、私はこれについて少し考えました、そしてあなたが試すべきいくつかの推測があります。これらのいずれかを行う前に、アプリを再起動してください。時々それは奇跡をします。

heroku restart

さて、コンソールで試してみてください

@customer.responses

それは何を返しますか?あるべきだと思います[]。たぶん、その検査などを行うことで、ここで洞察を得ることができます。応答を手動で作成して関連付ける場合、応答を表示させることができますか?

第二に、メソッドなしのエラーはオンresponsesではなくオンcreateになっているので、その後に入力するものはおそらく重要ではありませんが、フィールドはoffer_id整数digitですか?その場合は、文字列ではなく整数を使用して作成してみてください。PostgreSQLはMySQLやSQLiteに比べて非常に壊れやすいため、Herokuで開発する前にPostgreを操作することに慣れていなかったことにまでさかのぼる問題がたくさんありました。

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

それはおそらく問題ではありませんが、チェックする価値があります。

チェックするもう1つのことは、すべてのコールバックと検証などです。何か失敗していますか?関連していないように見えるかもしれませんが、私が見落としていたコールバックでの小さなサイレント障害のために、物事が非常に奇妙に動作するという問題が以前にありました。テストを進めていくと確信していますが、このモデルのどこかに浅いテストカバレッジがある場合は、このバグハントを強化するチャンスとして使用することをお勧めします:)

エラーに同情します。これが役立つかどうかはわかりませんが、幸運を祈ります。Herokuのスタッフが問題を見つけたら、投稿してください。私はそれから学ぶことに非常に興味があります!

于 2011-04-07T13:33:35.727 に答える
0

問題は、応答をどのように作成するかです。

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

代わりにこれを試してみてください。

Response.create(:offer_id => '1', :digit => '2', :customer_id => 1)
于 2011-04-07T01:40:53.903 に答える