2010-10-17 7 views
0

Mon modèle :post est le modèle parent. Dans un post sont de nombreux commentaires. Et les commentaires ont le potentiel d'avoir beaucoup plus de commentaires, et ainsi de suite. Je pensais que je l'avais eu ce droit, mais je devais taper:Essayer de faire des commentaires de commentaires. Comment organiser les modèles?

Comment.last.comments 

Je reçois:

NoMethodError: undefined method `comments' for #<Comment:0x1053a1ff0> 

Mes modèles:

#comment.rb 

belongs_to :post 
belongs_to :parent, :class_name => 'Comment' 
has_many :children, :class_name => 'Comment' 

validates_presence_of :text 

#post.rb 

has_many      :comments           
accepts_nested_attributes_for :comments, :allow_destroy => true 

Ma migration

class CreateComments < ActiveRecord::Migration 
    def self.up 
    create_table :comments do |t| 
     t.text  :text 
     t.integer :post_id 
     t.integer :comment_id 

     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :comments 
    end 
end 

Répondre

1

Commentaires ne pas beaucoup de commentaires, que de nombreux enfants:

Comment.last.children De plus, vous devez dire ce que la clé étrangère à utiliser. Jetez un coup d'oeil sur un enregistrement auto référencé - http://blog.hasmanythrough.com/2006/4/21/self-referential-through Ou mieux utiliser des arbres comme un ensemble imbriqué.

+0

+1 pour l'ensemble imbriqué - voir ici: http://github.com/collectiveidea/awesome_nested_set – zetetic

+0

Merci les gars. @zetetic, je suis intimidé par un plugin à cause de sa verbosité. Mais j'ai trouvé Ryan Bates frappé à nouveau avec celui-ci: http://railscasts.com/episodes/163-self-referential-association. On dirait que c'est une référence à la suggestion de C0r0ner. Merci – Trip

+0

C'est juste. Conscient que la sélection de tous les enfants d'un commentaire avec une profondeur illimitée sera une vraie douleur. Donc, si vous avez besoin d'un nombre illimité de commentaires, utilisez l'ensemble imbriqué en dépit de la verbosité – Sigurd

Questions connexes