ActiveRecord克隆记录与内存关联?

时间:2012-12-17 16:01:16

标签: ruby-on-rails activerecord rspec

我有一个属于用户的活动记录模型:

class Profile < ActiveRecord::Base
  belongs_to :user
  ...
end

在我的模型测试中,我有一个before_all块:

before :all do
  @profile = build(:user)
end

每个测试用例通过访问器方法获取配置文件类的干净副本,该方法深入克隆该对象:

def profile
  @profile.dup
end

美好而快速,而不是每次都打电话给工厂:)

但是我的问题是因为配置文件及其关联在内存中,配置文件中不存在user_id,因此内存用户对象也不会被复制。

所以虽然@profile.user是一个对象:

<User id: nil, email 'test@test.com '.../>

@profile.dup.user

nil

如果我在哪里拨打@profile.save,那就神奇地

@profile.dup.user变为:

<User id: 1, email 'test@test.com '...>

如果没有覆盖我的私有方法以明确地将用户复制到克隆上,那么就有办法让rails进行提升。即使dup方法的行为与保留@profile时的行为相同吗?

感谢您的任何建议。

0 个答案:

没有答案