Найдите свой путь вверх по полиморфному дереву одному родителю

StackOverflow https://stackoverflow.com/questions/4002821

Вопрос

У меня простая полиморфная ассоциация

#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 С комментариями, если вам нужна производительность.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top