【问题标题】:DataMapper Self Referential ModelDataMapper 自引用模型
【发布时间】:2023-03-10 08:41:01
【问题描述】:

我有一个模型:

class Comment
   include DataMapper::Resource
   property :id, Serial
   property :comment, Text, :required => true  
   belongs_to :user
   belongs_to :lecture
   has n, :replies, :child_key => [:source_id]
   has n, :comments, self, :through => :replies, :via => :target
end

我想添加一条评论作为对另一个已创建评论的回复。当我尝试时:

lecture = Lecture.get(params[:lecture_id])
comment = Comment.new(:comment => params[:text])  
@user.comments << comment
lecture.comments << comment 

if !params[:parent].nil? then
  parent = Comment.get(params[:parent])
  parent.replies << comment
end

parent.replies &lt;&lt; comment 行抛出错误:
NoMethodError - undefined method source_id=' for #&lt;Comment @id=nil @comment="asd" @user_id=1 @lecture_id=1&gt;

我的回复模型是:

class Reply 
 include DataMapper::Resource 
  belongs_to :source, 'Comment', :key => true
  belongs_to :target, 'Comment', :key => true
end

如何正确添加评论作为“回复”?谢谢。

【问题讨论】:

    标签: ruby sinatra datamapper


    【解决方案1】:

    您确定要Reply 模型吗?评论树只能建立在一个具有自关联的模型Comment 上。

    class Comment
      ...
      has n, :replies, 'Comment', :child_key => :source_id
      belongs_to :source, 'Comment', :required => false
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-20
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多