Я создаю небольшое приложение 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
Я следую руководству на странице Associates и создаю новый объект (CommentConnection), чтобы связать два комментария вместе, но Моя проблема в том, что каждый подкомментарий не должен принадлежать сообщению, как подразумевается классом комментариев.
Моим первым побуждением было выделить суперкласс для комментариев, чтобы один подкласс мог быть «верхнего уровня» и принадлежать сообщению, а другой тип комментариев принадлежал другому комментарию. К сожалению, когда я это делаю, я сталкиваюсь с проблемами, когда идентификаторы комментариев становятся нулевыми.
Как лучше всего смоделировать такую рекурсивную связь комментариев в DataMapper?