Rails 制造 gem 关联创建许多对象
Rails Fabrication gem association creating many objects
我有两个具有简单 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
当我使用第二个时,它工作正常,它创建 one Publicacion
和 one Usuario
> a = Fabricate :publicacion
> Usuario.count
=> 1
> Publicacion.count
=> 1
但是当我使用第一个时,它创建了 ten Publicaciones
但是 eleven Usuarios
,所有 Publicaciones
只与最后一个关联。
> u = Fabricate :usuario_con_10_publicaciones
> Usuario.count
=> 11
> Publicacion.count
=> 10
它不应该只创建 一个 Usuario
和 十 Publicaciones
?
感谢您的帮助。
问题是,当你创建 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
史蒂夫对正在发生的事情是正确的。另一种解决方案是禁止在 publicaciones
.
中创建 usario
Fabricator(:usuario_con_10_publicaciones) do
nombre { FFaker::NameMX.name }
publicaciones(count: 10) { Fabricate.build(:publicacion, usuario: nil) }
end
当树被持久化时,ActiveRecord 会正确地为你关联它们。
我有两个具有简单 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
当我使用第二个时,它工作正常,它创建 one Publicacion
和 one Usuario
> a = Fabricate :publicacion
> Usuario.count
=> 1
> Publicacion.count
=> 1
但是当我使用第一个时,它创建了 ten Publicaciones
但是 eleven Usuarios
,所有 Publicaciones
只与最后一个关联。
> u = Fabricate :usuario_con_10_publicaciones
> Usuario.count
=> 11
> Publicacion.count
=> 10
它不应该只创建 一个 Usuario
和 十 Publicaciones
?
感谢您的帮助。
问题是,当你创建 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
史蒂夫对正在发生的事情是正确的。另一种解决方案是禁止在 publicaciones
.
usario
Fabricator(:usuario_con_10_publicaciones) do
nombre { FFaker::NameMX.name }
publicaciones(count: 10) { Fabricate.build(:publicacion, usuario: nil) }
end
当树被持久化时,ActiveRecord 会正确地为你关联它们。