"Ретвиты" с 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
Другие вопросы по тегам