使用Datamapper“转发”

时间:2012-07-16 12:19:47

标签: ruby datamapper carrierwave recreate repost

我想表达与Twitter Repost System类似的内容,因此我将以此为例。所以,假设我有一个Tweet模型,我想让其他用户重新发布另一个用户的certian推文,我该如何表达这样的内容? 当我使用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

重要:我应该与carrierwave兼容。

1 个答案:

答案 0 :(得分:0)

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