0

我有两个具有简单has_many关联的模型

class Usuario < ActiveRecord::Base
  has_many :publicaciones, dependent: :destroy
end

class Publicacion < ActiveRecord::Base
  belongs_to :usuario, dependent: :destroy
  validates_presence_of :usuario
end

这些是制造商

Fabricator(:usuario_con_10_publicaciones) do
  nombre { FFaker::NameMX.name }
  publicaciones(count: 10)
end

Fabricator(:publicacion) do
  texto { FFaker::Lorem.paragraphs }
  usuario
end

当我使用第二个它工作正常时,它会创建一个 Publicacion一个 Usuario

> a = Fabricate :publicacion
> Usuario.count
=> 1
> Publicacion.count
=> 1

但是当我使用第一个时,它会创建10 Publicaciones11 Usuarios,所有Publicaciones关联都与最后一个相关联。

> u = Fabricate :usuario_con_10_publicaciones
> Usuario.count
=> 11
> Publicacion.count
=> 10

它不应该只创建 Usuario Publicaciones吗?

谢谢你的帮助。

4

2 回答 2

1

史蒂夫对正在发生的事情是正确的。另一种解决方案是抑制usario.publicaciones

Fabricator(:usuario_con_10_publicaciones) do
  nombre { FFaker::NameMX.name }
  publicaciones(count: 10) { Fabricate.build(:publicacion, usuario: nil) }
end

当树被持久化时,ActiveRecord 会为你正确地关联它们。

于 2016-06-16T12:02:30.557 回答
0

问题是,当您创建usario它时,它会创建 10 个publicaciones ,但每个publicaciones制造都会创建一个usario

您可以使用瞬态来抑制新usario记录的默认创建。

Fabricator(:usuario_con_10_publicaciones) do
  nombre { FFaker::NameMX.name }
  publicaciones(count: 10) { Fabricate(:publicacion, no_usario: true) }
end

Fabricator(:publicacion) do
  transient :no_usario
  texto { FFaker::Lorem.paragraphs }
  usuario { |attrs| Fabricate(:usario) unless attrs[:no_usario] }
end
于 2016-06-15T21:38:21.340 回答