2009-05-24 3 views
1

私の(親)BlogPostsテーブルのカウンタキャッシュが(子)コメント表。最初は私のearlier questionで提供された答えは解決策かもしれないと思っていましたが、昨夜私が起床してRailsコンソールを再起動したとき、BlogPosts(実際にはPost-id#1)関連する子供のコメントを見つけることはできません。私はCommentsテーブルをチェックし、作成した5つのコメントはすべてpost_id = 1に添付されています。earlier questionのRailsコンソールからの出力は、投稿が昨夜コメントを見つけることができることを示しています。おそらくこれはカウンタキャッシュが更新されていない理由を説明していますが、なぜ親が子を見つけることができないのかまだ分かりません。何かヒント?Railsコンソールを再起動した後、親モデルは関連する子モデルオブジェクトを見つけることができませんでした

Loading development environment (Rails 2.3.2) 

>> p = Post.find(1) 
p = Post.find(1) 

=> #<Post id: 1, title: "test", content: "test", author_id: 1, status: "ok", created_at: "2009-05-21 19:27:14", updated_at: "2009-05-24 07:21:24", comments_count: 0> 

>> p.comments.size 
p.comments.size 

=> 0 

>> p.comments 
p.comments 

=> [] 

UPDATE:これは奇妙である - 私は再びしかし、私は「p.comments.size」と呼ばれる前に、私はp.commentsと呼ばれる今回のRailsコンソールを再起動する - そしてそれはコメントを見つけました!何が起きてる?

Loading development environment (Rails 2.3.2) 

>> p = Post.find 1 
p = Post.find 1 

=> #<Post id: 1, title: "test", content: "test", author_id: 1, status: "ok", created_at: "2009-05-21 19:27:14", updated_at: "2009-05-24 07:21:24", comments_count: 0> 

>> p.comments 
p.comments 

=> [#<Comment id: 5, post_id: 1, author_id: 1, content: "Fifth Comment", status: "ok", created_at: "2009-05-24 07:08:56", updated_at: "2009-05-24 07:08:56">, #<Comment id: 4, post_id: 1, author_id: 1, content: "Fourth Comment", status: "ok", created_at: "2009-05-24 07:05:32", updated_at: "2009-05-24 07:05:32">, #<Comment id: 3, post_id: 1, author_id: 1, content: "Third Comment", status: "ok", created_at: "2009-05-24 06:34:59", updated_at: "2009-05-24 06:34:59">, #<Comment id: 2, post_id: 1, author_id: 1, content: "Second Comment", status: "ok", created_at: "2009-05-24 05:20:43", updated_at: "2009-05-24 05:20:43">, #<Comment id: 1, post_id: 1, author_id: 1, content: "First Comment", status: "ok", created_at: "2009-05-21 19:27:14", updated_at: "2009-05-21 19:27:14">] 

>> p.comments.size 
p.comments.size 

=> 5 

更新2:srboisvertのアドバイスに従って、新しいコメントを作成して投稿に追加しました。これは、働いていたと1 .:

Loading development environment (Rails 2.3.2) 

>> p = Post.find 1 
p = Post.find 1 

=> #<Post id: 1, title: "test", content: "test", author_id: 1, status: "ok", created_at: "2009-05-21 19:27:14", updated_at: "2009-05-24 07:21:24", comments_count: 0> 

>> com = Comment.new(:post_id => 1, :author_id => 1, :content => 'Sixth Comment', :status => 'ok') 
com = Comment.new(:post_id => 1, :author_id => 1, :content => 'Sixth Comment', :status => 'ok') 

=> #<Comment id: nil, post_id: 1, author_id: 1, content: "Sixth Comment", status: "ok", created_at: nil, updated_at: nil> 

>> p.comments << com 
p.comments << com 

=> [#<Comment id: 6, post_id: 1, author_id: 1, content: "Sixth Comment", status: "ok", created_at: "2009-05-24 17:59:45", updated_at: "2009-05-24 17:59:45">, #<Comment id: 5, post_id: 1, author_id: 1, content: "Fifth Comment", status: "ok", created_at: "2009-05-24 07:08:56", updated_at: "2009-05-24 07:08:56">, #<Comment id: 4, post_id: 1, author_id: 1, content: "Fourth Comment", status: "ok", created_at: "2009-05-24 07:05:32", updated_at: "2009-05-24 07:05:32">, #<Comment id: 3, post_id: 1, author_id: 1, content: "Third Comment", status: "ok", created_at: "2009-05-24 06:34:59", updated_at: "2009-05-24 06:34:59">, #<Comment id: 2, post_id: 1, author_id: 1, content: "Second Comment", status: "ok", created_at: "2009-05-24 05:20:43", updated_at: "2009-05-24 05:20:43">, #<Comment id: 1, post_id: 1, author_id: 1, content: "First Comment", status: "ok", created_at: "2009-05-21 19:27:14", updated_at: "2009-05-21 19:27:14">] 
+1

あなたの実行時にあなたのポストにコメントがありますか?Comment.all? – klew

+0

はい、私のテストコメントの5つがすべて表示され、すべて1のpost_idを持っています。私のブログ投稿にも1の対応IDがあります。 –

答えて

1

に更新comments_counterあなたは、コンソールでコメントを作成ポストにそれを追加し、3つの段階に分けて、それを表示することができますか?

デフォルト以外のfkの名前指定をしています(あなたの名前は、レールが期待するものと違うようには見えないので、慣習を使いたいかもしれません)。だから私の推測は、どういうわけかhas_many belongs_toは台無しです。

+0

良いアイデア。私はちょうどこれを試み、それは正常に働いた。カウンタキャッシュも1に更新されました。私は、もしそうなら、私の答えにRailsのコンソール出力を入れます。これは正しい方向に進んでいますが、has_manyとbelongs_toは実際にはうんざりしていません。また、移行が既存のPostを更新して、既存のコメントの正しい数を報告できなかった理由を説明していません。コンソールでp.commentsを使用する前にp.comments.sizeを呼び出すのが異なる効果を持つ理由もありません。フィードバックをお寄せいただきありがとうございます。私はしつこい続けます。 –

関連する問題