0

J'ai une association polymorphique simple,Trouvez votre chemin jusqu'à l'arbre polymorphes à un parent

#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 

Ainsi, dans la CISR que je peux faire, Post.comments ou Comment.comments. Mais comment puis-je trouver la publication parente?

Comme dans Comment.post? Je peux actuellement obtenir leur en faisant une série de .commentable. Par exemple:

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

Répondre

1

Vous pouvez monter la liste, .: par exemple

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

Mais cela peut être très lent si elles sont profondément imbriquées (n requêtes db). Je vous suggère simplement de stocker parent_post_id avec des commentaires si vous avez besoin de performance.

+0

GRANDE IDÉE sur parent_post_id !! Aussi oui, c'est si lent, ma grand-mère pourrait retourner des valets à rabats sur son dos plus vite que ça. – Trip

+0

vous ne devrais vraiment pas programmer quand vous êtes mec mec ... (** toux ** ** toux **) :) – glebm

+0

Quelle nuit ... – Trip