0

この問題は本当に私を失っています。

認証のモデルがあります:ユーザー。私はコメントのモデルを持っています:コメント。コメント可能なモデルがあります:weburl.

Weburl 1..* コメント Weburl *..1 ユーザー コメント *..1 ユーザー

私が抱えている問題はテストできず (私のテストはすべて合格です)、常に発生するわけではありません。通常、同じコントローラー アクションを 2 回生成したときに発生します。

問題は、ユーザーがコメントに関連付けられていることです。属性が同じであっても、comment.user を介して取得すると、current_user と等しくなりません。例えば ​​:

(comment.user.login == current_user.login == User.find(1).login)
     ==> True
(comment.user.id)
     ==> Unknown in the current context
(comment.user.class == User == current_user.class)
     ==> True 

私は関係belongs_toを再確認しhas_one has_many、私のモデルで

私の推測では、これはキャッシングと関係があると思います。開発環境でこれを経験していますが、自動テストや本番環境では経験していません。

何が問題なのかを理解したいと思います。

ありがとう

EDIT 私の development.rb 初期化ファイルを追加する

config.cache_classes = false                                    #Set to true for prod
config.whiny_nils = true
config.action_controller.consider_all_requests_local = true     #Set to false for prod
config.action_view.debug_rjs                         = true
config.action_controller.perform_caching             = false    #Set to true for prod

編集 #2 config.cache_classes が true の場合、エラーは発生していません

Doc のコメント: # 開発環境では、アプリケーションのコードはリクエストごとにリロードされます。これにより応答時間が遅くなりますが、コードを変更するときに Web サーバーを再起動する必要がないため、開発には最適です。

次のチケットが見つかりました。相互に関連している可能性がありますhttp://dev.rubyonrails.org/ticket/10722 また、問題は Mongrel と WebRick で発生します。

4

3 に答える 3

1

あなたの質問の意味は次のとおりだと思います:なぜこれがうまくいかないのですか: comment.user == current_user.

2 つの Ruby オブジェクトを相互にcomment.user == current_user比較する場合、つまり参照を比較していることになります。これらは 2 つの一意のオブジェクトであり、メモリの異なる領域にあるため、これは正しい動作です。

代わりに、ログインや ID などの他の一意のフィールドを比較する必要があります。

于 2009-02-04T21:07:37.227 に答える
0

ここでスローされるエラーは正確には何ですか: (comment.user.id)? Comment オブジェクトから User オブジェクトにアクセスできない場合は、モデルに何かが欠けている可能性があります。私はこれを確認するためのコンソールに近づいていませんが、

于 2009-02-04T21:12:13.163 に答える
0

同様の問題があり、データベースをダンプして再読み込みすることで解決しました。

于 2013-01-03T15:18:30.780 に答える