Найдите свой путь вверх по полиморфному дереву к одному из родителей - PullRequest
0 голосов
/ 23 октября 2010

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

#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.comments или Comment.comments.

Но как мне найти родительский пост?

Как в Comment.post?

В настоящее время я могу получить их, выполнив серию .commentable.Например:

Comment.find(1).commentable.commentable
=> Post(:id => ...

1 Ответ

1 голос
/ 23 октября 2010

Вы можете перейти вверх по списку, например:

class Comment < ActiveRecord::Base
    def parent_post
      c = self
      c = c.commentable while c.is_a?(Comment)
      c
    end
end

Но это может быть ОЧЕНЬ медленным, если они глубоко вложены (n дБ запросов).Я предлагаю вам просто хранить parent_post_id с комментариями, если вам нужна производительность.

...