"Ретвиты" с Datamapper
Я хочу сделать что-то похожее на систему Twitter Repost, поэтому я буду использовать это в качестве примера. Допустим, у меня есть Tweet Model, и я хочу, чтобы другой пользователь мог опубликовать определенный твит другого пользователя, как мне сделать что-то подобное? Я подумал, что было бы крутой идеей поместить класс ретвитов в твит, чтобы иметь возможность получить доступ и к репосту, когда я использую Tweet.all
чтобы получить все твиты, хранящиеся в базе данных, но почему-то я не сработал, как ожидалось... Следующий код является просто примером, который должен показать, как это реализовать, даже если он не работает... Любые идеи, как я мог бы построить рабочая модель репоста, которая также позволяет мне получать доступ как к твитам, так и к ретвитам, используя Tweet.all
?
class Tweet
class Retweet
include DataMapper::Resource
belongs_to :user, key => true
belongs_to :tweet, key => true
end
include DataMapper::Resource
property :text, String
property :timestamp, String
belongs_to :user
end
Важно: я должен быть совместимым с оператором связи.
1 ответ
class Tweet
include DataMapper::Resource
property :id, Serial
has n, :retweets, 'Tweet', :child_key => :parent_id
belongs_to :parent, 'Tweet', :required => false
belongs_to :user
def is_retweet?
self.parent_id ? true : false
end
end
original = Tweet.create :user => user1
retweet = Tweet.create :parent => original, :user => user2
retweet.is_retweet? # => true