Если комментарий должен быть связан с более чем одной моделью, мы называем его polymorphic association
.Вы можете взглянуть на плагин has_many_polymorphs
для этого.Я предполагаю, что вы используете рельсы 3, вы можете попробовать следующее:
Вы можете задать модуль в папке lib/commentable.rb
следующим образом:
module Commentable
def self.included(base)
base.class_eval do
has_many :comments, :as => commentable
end
end
end
В модели комментариев вы должны сказатьчто он полиморфный:
belongs_to :commentable, :polymorphic => true
В моделях Post и User можно добавить следующее:
has_many :comments, :as => :commentable, :dependent => :delete_all
Поскольку в Rails 3 папка lib по умолчанию не загружается, выдолжен попросить Rails загрузить это в ваш application.rb:
config.autoload_paths += %W(#{config.root}/lib)
Теперь, Comment является полиморфным, и с ним может быть связана любая другая модель.Это должно сделать.