Я создаю небольшое приложение на Ruby с использованием DataMapper и Sinatra и пытаюсь определить базовую модель блога:
- В блоге несколько пользователей
- У меня естьколлекция сообщений, каждое из которых публикуется пользователем
- Каждое сообщение имеет набор комментариев
- Каждый комментарий может иметь свой собственный набор комментариев - это может повторяться на нескольких уровнях глубиной
У меня возникают проблемы с установкой самореференциальной связи между комментариями из-за того, что каждый комментарий belongs_to
представляет собой пост.Мои классы сейчас выглядят так:
class User
include DataMapper::Resource
property :id, Serial
property :username, String
property :password, String
has n, :post
end
class Post
include DataMapper::Resource
property :id, Serial
property :content, Text
belongs_to :user
has n, :comment
end
class Comment
include DataMapper::Resource
property :id, Serial
property :content, Text
belongs_to :user
belongs_to :post
end
Я следую руководству по Ассоциации и создаю новый объект (CommentConnection), чтобы связать два комментария вместе, но моя проблема в том, что каждый подкоммент не должен принадлежать посту, как подразумевается классом Comment.
Моим первым инстинктом было извлечь суперкласс для комментариев, чтобы один подкласс мог быть "верхнего уровня"."и принадлежат сообщению, в то время как другой вид комментария принадлежит другому комментарию.К сожалению, когда я это делаю, я сталкиваюсь с проблемами, когда идентификаторы комментариев становятся нулевыми.
Каков наилучший способ моделирования такого рода рекурсивных отношений комментариев в DataMapper?