рельсы: самореферентная ассоциация - PullRequest
1 голос
/ 12 июня 2010

Мои потребности очень просты: у меня есть таблица советов для получения комментариев и комментарии для получения комментариев.

Чтобы получить каждый комментарий, который хранится в той же таблице (комментарии), я создал еще один ключ для комментариев к комментариям: "inverse_comments".

Я попытался использовать одну таблицу комментариев, используяассоциативная ассоциация.Некоторые ресурсы, кажется, приносят в стол более одного стола, что отличается от моих потребностей.Итак, я пришел к следующему моделированию для комментариев:

class Comment < ActiveRecord::Base
  belongs_to :tip 
  belongs_to :user
  has_many :mycomments, 
           :through => :inverse_comments,
           :source => :comment
end

Очевидно, что-то здесь не хватает, но я не могу понять это.Может ли кто-нибудь рассказать мне об этом:

Какие изменения мне нужно сделать, чтобы модель работала?

спасибо.

1 Ответ

5 голосов
/ 12 июня 2010

Я полагаю, вам следует использовать полиморфную ассоциацию .

Для этого вам нужно добавить commentable_id и commentable_type на ваш comments стол. И ваши модели должны выглядеть так:

class Comment < ActiveRecord::Base
   belongs_to :user
   belongs_to :commentable, :polymorphic => true    
   has_many :comments, :as => :commentable
end 

class Tip < ActiveRecord::Base 
   has_many :comments, :as => :commentable
end

Таким образом, вы можете использовать

@tip.comments
@comment.comments
...