После перезапуска консоли Rails родительская модель не может найти связанные дочерние объекты модели (а затем может) - PullRequest
1 голос
/ 24 мая 2009

Я застрял, пытаясь выяснить, почему кеш счетчика в моей (родительской) таблице BlogPosts не будет обновляться из (дочерней) таблицы комментариев. Сначала я подумал, что ответ, предоставленный в моем предыдущем вопросе , может быть решением, но что-то случилось после того, как я вчера лег спать, потому что, когда я проснулся этим утром и перезапустил свою консоль Rails, мои BlogPosts (фактически только один Пост - id # 1) не может найти связанных с ними дочерних комментариев. Я проверил таблицу комментариев, и все пять комментариев, которые я создаю, находятся там и прикреплены к 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 ДО ТОГО, как я назвал "p.comments.size" - И НАЙДЕТЕ КОММЕНТАРИИ !! Что здесь происходит?

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">]

1 Ответ

1 голос
/ 24 мая 2009

Можете ли вы создать комментарий в консоли, добавить его в сообщение и затем отобразить его в 3 отдельных шага?

Вы выполняете множество нестандартных спецификаций имени fk (хотя ваши имена, кажется, не сильно отличаются от ожидаемых rails, поэтому вы можете захотеть просто использовать соглашения), так что я предполагаю, что ваш has_many как-то принадлежит_to перепутались.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...