рельсы: самореферентная ассоциация

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

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

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

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

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

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

благодаря.


person john    schedule 12.06.2010    source источник


Ответы (1)


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

Для этого вам нужно добавить 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
person Ju Nogueira    schedule 12.06.2010