【问题标题】:Why is datamapper trying to re-save my relationships?为什么 datamapper 试图重新保存我的关系?
【发布时间】:2026-02-11 15:05:02
【问题描述】:

我有一个名为 User 的模型,它与 Interests 有多对多的关系。

假设连接表如下所示:

User ID | Interest ID
---------------------
   5    |      1

当我编辑这个用户的名字(例如)并调用user.save时,它失败了。

它失败的原因是因为 datamapper (AFAIK) 试图重新保存与兴趣的关系。我得到的错误是:

duplicate key value violates unique constraint "user_interests_pkey"
DETAIL:  Key (user_id, interest_id)=(5, 1) already exists.

有人经历过吗?有人知道解决方案吗?提前感谢您的帮助。

更新

用户模型看起来像:

class User    
  include DataMapper::Resource

  has n, :interests, :through => Resource, :constraint => :skip  
end

而兴趣模型看起来像:

class Interest
  include DataMapper::Resource

  has n, :users, :through => Resource, :constraint => :skip
end

【问题讨论】:

    标签: ruby-on-rails postgresql datamapper


    【解决方案1】:

    如果您只想运行代码,请将user.save 放入

    begin
      user.save
    rescue
      # DO STH MEANINGLESS
    end
    

    如果你真的想解决这个问题,你应该更详细一点。这是一个HABTM协会吗?关联规范也会有所帮助。

    【讨论】:

    • 我已经添加了模型关系规范 - 它是原始问题中提到的多对多关系。谢谢!