1

(親)BlogPostsテーブルのカウンターキャッシュが(子)Commentsテーブルから更新されない理由を理解しようとして立ち往生しています。最初は、以前の質問で提供された答えが解決策かもしれないと思いましたが、昨夜寝た後、今朝起きてRailsコンソールを再起動したときに、BlogPosts(実際には1つの投稿-id#1)が発生しました。関連する子のコメントを見つけることができません。コメントテーブルを確認しました。作成した5つのコメントはすべてそこにあり、post_id=1に添付されています。前の質問の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

=> []

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

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のアドバイスに従って、新しいコメントを作成して投稿に追加しました。これは機能し、comments_counterは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">]
4

1 に答える 1

1

コンソールでコメントを作成し、それを投稿に追加してから、3 つの別々のステップで表示できますか?

あなたはデフォルト以外の fk 名の指定をたくさん行っています (あなたの名前はレールが期待するものとそれほど変わらないように見えるので、単に慣例を使用したいかもしれません) だから私の推測では、どういうわけかあなたの has_many belongs_to が台無しになっていると思います.

于 2009-05-24T17:53:50.200 に答える