:dependent => :destroy不会对has_one关系起作用

时间:2015-05-25 11:27:05

标签: ruby-on-rails has-one dependent-destroy

在我的模特中

class User < ActiveRecord::Base
    has_one :user_detail, dependent: :destroy
end

class UserDetail < ActiveRecord::Base
  belongs_to :user
end

当我为User对象调用destroy时,关联的UserDetail对象不会被销毁。

这是一个测试(当然,它失败了,因为user_detail不是零):

  test "associate object should be destroyed" do
    user_id = @user.id
    @user.destroy
    user_detail = UserDetail.find_by(:user_id => user_id)
    assert_nil user_detail
  end

有没有人知道为什么会这样?

1 个答案:

答案 0 :(得分:0)

你的逻辑很好,但这是你的测试代码就是问题所在。试试这个:

test "associate object should be destroyed" do
  user_detail = @user.user_detail
  @user.destroy
  expect(UserDetail.find_by(:user_id => @user.id)).to be_nil
end

正在发生的事情是与user_detail对应的数据库行被销毁,但该变量仍保留该值。

编辑以回复评论,因为我无法将代码块放在评论中:

@ user.id不是nil,因为如果你测试它,你会看到id仍然被保留,因为它是内存模型。我有一个我正在测试的随机rails应用程序,这里有一些控制台输出:

irb(main):002:0> l = Loan.first
irb(main):003:0> l.destroy
irb(main):004:0> l.id
=> 14