Ruby on Rails - 如何在没有:delete或:destroy的情况下将一个has_one关联替换为另一个

时间:2017-04-19 20:43:20

标签: ruby-on-rails ruby ruby-on-rails-5

我有这两个类:

    class Dungeon < ApplicationRecord
      has_one :room
      ...
    end

    class Room < ApplicationRecord
      belongs_to :dungeon
      ...
    end

我希望能够将Dungeon的一个Room对象替换为另一个,而不会实际删除或破坏Dungeon的原始Room对象。当我尝试使用update(room: r)时,我得到了

ActiveRecord::RecordNotSaved: Failed to remove the existing associated room. The record failed to save after its foreign key was set to nil.

我需要做些什么才能简单地将Dungeon的一个房间替换为另一个房间?

1 个答案:

答案 0 :(得分:4)

由于Rails 5 belongs_to关联需要关联对象存在(请参阅:PR introducing this behavior)。

说:如果你想保留一个room,虽然它没有关联dungeon,你必须将belongs_to定义更改为:

belongs_to :dungeon, optional: true