Найдите свой путь вверх по полиморфному дереву одному родителю
-
25-09-2019 - |
Вопрос
У меня простая полиморфная ассоциация
#comment.rb
belongs_to :commentable, :polymorphic => true
has_many :comments, :as => :commentable
#post.rb
has_many :comments, :as => :commentable
accepts_nested_attributes_for :comments, :allow_destroy => true
Итак, в IRB я могу сделать, постконцентрировать и или комментарий.
Но как я могу найти родительский пост?
Как в комментарии.post?
В настоящее время я могу получить их, делая серию .commentable
. Например :
Comment.find(1).commentable.commentable
=> Post(:id => ...
Решение
Вы можете подняться в список, например:
class Comment < ActiveRecord::Base
def parent_post
c = self
c = c.commentable while c.is_a?(Comment)
c
end
end
Но это может стать очень медленным, если они глубоко вложены (n
queries db). Я предлагаю вам просто хранить parent_post_id
С комментариями, если вам нужна производительность.
Не связан с StackOverflow