我有两个简单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
但是当我使用第一个时,它会创建十个 Publicaciones
但十一个 Usuarios
,其中所有Publicaciones
都会关联就在最后一个。
> u = Fabricate :usuario_con_10_publicaciones
> Usuario.count
=> 11
> Publicacion.count
=> 10
不应该只创建一个 Usuario
和十 Publicaciones
吗?
感谢您的帮助。
答案 0 :(得分:1)
usario
中创建publicaciones
。
Fabricator(:usuario_con_10_publicaciones) do
nombre { FFaker::NameMX.name }
publicaciones(count: 10) { Fabricate.build(:publicacion, usuario: nil) }
end
当树持久存在时,ActiveRecord会为您正确关联它们。
答案 1 :(得分: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