Лучшая идея, вероятно, сделать то, что предлагает Сара, и использовать один из существующих плагинов, которые обрабатывают комментарии.
Если вы хотите свернуть свое собственное дело или просто понять, что происходит под прикрытием, вам нужно прочитать о наследовании отдельных таблиц, как Rails обрабатывает наследование. По сути, вам нужен один comments
стол ala:
# db/migrate/xxx_create_comments
create_table :comments do |t|
t.string :type, :null => false
t.references :movies, :songs, :photos
end
Теперь вы можете определять типы комментариев как
class Comment < ActiveRecord::Base
validates_presence_of :body, :author
# shared validations go here
end
class SongComment < Comment
belongs_to :song
end
class MovieComment < Comment
belongs_to :movie
end
class PhotoComment < Comment
belongs_to :photo
end
Все ваши комментарии будут храниться в одной таблице comments
, но PhotoComment.all
возвращает только те комментарии, для которых type == "Photo"
.