Я реализую концепцию counter_cache
в своем приложении Форумы.Он отлично работает для одной модели, которая имеет простую belongs_to
ассоциацию, но не работает для полиморфной ассоциации.
Моя структура приложения выглядит следующим образом.У меня есть 3 модели, форум, сообщение и комментарий.
class Forum < ApplicationRecord
has_many :posts
end
Модель сообщения:
class Post < ApplicationRecord
belongs_to :forum, counter_cache: true
has_many :comments, as: :parent
end
Модель комментария:
class Comment < ApplicationRecord
belongs_to :parent,polymorphic: true, counter_cache: true
has_many :comments, as: :parent
end
Мои комментарии Модель в основномполиморфный, поэтому комментарий может принадлежать сообщению или комментарий может принадлежать другому комментарию (таким образом, он будет считаться ответом на комментарий)
У меня есть поле posts_count
в Forum
модель, которая работает нормально, работает автоматическое увеличение и уменьшение.
У меня также есть поле comments_count
в модели Post
.При создании нового комментария поле comments_count
увеличивается в соответствующей публикации.Но когда я пытаюсь создать комментарий, чьим родителем (полиморфная ассоциация) является другой комментарий (то есть, в основном, ответ на комментарий), я получаю сообщение об ошибке:
Started POST "/comments" for 103.255.4.86 at 2018-10-18 20:48:39 +0000
Cannot render console from 103.255.4.86! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by CommentsController#create as JS
Parameters: {"utf8"=>"✓", "comment"=>{"body"=>"testing a reply", "parent_id"=>"812", "parent_type"=>"Comment"}}
Post Load (0.8ms) SELECT "posts".* FROM "posts" WHERE "posts"."id" = $1 LIMIT $2 [["id", 7], ["LIMIT", 1]]
(0.4ms) BEGIN
Comment Load (1.6ms) SELECT "comments".* FROM "comments" WHERE "comments"."id" = $1 LIMIT $2 [["id", 812], ["LIMIT", 1]]
SQL (0.9ms) INSERT INTO "comments" ("body", "parent_type", "parent_id", "owner_type", "owner_id", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING "id" [["body", "testing a reply"], ["parent_type", "Comment"], ["parent_id", 812], ["owner_type", "User"], ["owner_id", 46], ["created_at", "2018-10-18 20:48:39.141170"], ["updated_at", "2018-10-18 20:48:39.141170"]]
(0.4ms) ROLLBACK
Completed 500 in 43ms (ActiveRecord: 7.2ms)
ActiveModel::MissingAttributeError (can't write unknown attribute `comments_count`):
Что мне здесь не хватает?Любая подсказка будет очень признателен, спасибо !!