0

У меня есть простая полиморфная ассоциацияНайти свой путь полиморфного дерево одному из родителей

#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.

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

Как в комментарии.post?

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

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

ответ

1

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

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

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

+0

GREAT IDEA о parent_post_id !! И да, это так медленно, моя бабушка могла перевернуть лоскуты на ее спине быстрее, чем это. – Trip

+0

вы действительно не должны программировать, когда вы забросаны чуваком ... (** кашель ** ** кашель **) :) – glebm

+0

Что за ночь ... – Trip

 Смежные вопросы

  • Нет связанных вопросов^_^