Есть модели страницы, блоги, фотографии.
Как правильно организовать их взять с моделью комментарии?
У меня на примете два варианта.
1) В модели комментарии добавить поля page_id, blog_id, photo_id. В данном случае получится что в записи только одно поле будем с id, остальные будут NULL.
2) В каждой "родительской" модели добавить поле comment_id. Вот здесь я не представляю как реализовать создание/сохранение.
Какой лучше использовать и есть ли какие "подводные камни"?
1. Лучше всего подключить сервис комментариев, например - HyperComments
2. Если же все же вы рискнули делать свой велосипед - то рекомендую делать 3 таблицы!
объясню почему :
- комментарии для страниц могут содержать цитату из страницы или какую-другую ссылку. для блогов тоже такое может быть - а для фото такого нет!
- комментарии для фото могут иметь рейтинг от 0 до 10. а страница и блог могут и не иметь.
- и таких ньюансов может быть много, замучаетесь заполнять на 1/3 таблицу. а 2/3 будут пустые столбцы.
кароче это разные сущности - и лучше в БД их развести по отдельным таблицам. Тогда никаких подводных камней не будет!
Мне интересна идея велосипедов, сам хочу понять что и как это делается (учусь). А вообще если делать 3 таблицы, это на скорость никак не влияет? А если появиться еще сущность, под нее для комментов создавать еще таблицу отдельную. В целом вы правы, сейчас то запросы на функционал маленький, позже может понадобиться добавить рейтинг и т.п. Тот же вопрос про контроллеры, я что-то не понял когда их создавать, если создавать для каждой сущности, то слишком много их получится.
> это на скорость никак не влияет?
зависит от реализации логики. я с RoR не знаком.
Вы можете создавать таблицу Комментариев для группы сущностей, которые будут однотипны. Разграничить можно составным ключом.
Еще плюсом будет то, что одна таблица Комментариев не будет пыхтеть на все подсистемы. Будет своего рода распараллеливание запросов. И не будет все в одной "свалке", а все логично и красиво.