Diberikan berikut ini
class User < ActiveRecord::Base
has_and_belongs_to_many :companies
end
class Company < ActiveRecord::Base
has_and_belongs_to_many :users
end
bagaimana Anda mendefinisikan pabrik untuk perusahaan dan pengguna termasuk asosiasi dua arah? Ini usahaku
Factory.define :company do |f|
f.users{ |users| [users.association :company]}
end
Factory.define :user do |f|
f.companies{ |companies| [companies.association :user]}
end
sekarang saya coba
Factory :user
Mungkin tidak mengejutkan bahwa ini menghasilkan putaran tak terbatas karena pabrik secara rekursif menggunakan satu sama lain untuk mendefinisikan diri mereka sendiri.
Lebih mengejutkan lagi saya belum menemukan cara melakukan ini di mana pun, apakah ada pola untuk menentukan pabrik yang diperlukan atau saya melakukan sesuatu yang secara fundamental salah?
Factorygirl telah diperbarui dan sekarang menyertakan panggilan balik untuk mengatasi masalah ini. Kunjungi http://robots.thoughtbot.com/post/254496652/aint-no-calla-back-girl untuk info lebih lanjut.
sumber
after(:create)
alih-alihafter_create
di gadis pabrik seperti yang disebutkan di sini: stackoverflow.com/questions/15003968/…Menurut saya, buat saja dua pabrik berbeda seperti:
Ketika Anda menulis kasus uji untuk pengguna maka tulis saja seperti ini
Semoga berhasil.
sumber
Saya tidak dapat menemukan contoh untuk kasus yang disebutkan di atas di situs web yang disediakan. (Hanya 1: N dan asosiasi polimorfik, tapi tidak ada habtm). Saya memiliki kasus serupa dan kode saya terlihat seperti ini:
sumber
Yang berhasil bagi saya adalah mengatur asosiasi saat menggunakan pabrik. Menggunakan contoh Anda:
sumber
Menemukan cara ini bagus dan bertele-tele:
sumber
foos { |a| [a.association(:foo)] }
banyak membantu saya! Terima kasih!Peringatan: Ubah pengguna: [pengguna] menjadi: pengguna => [pengguna] untuk ruby 1.8.x
sumber
after_create { |company, evaluator| FactoryGirl.create_list(:user, evaluator.users_count, companies: [company]) }
?Pertama-tama saya sangat menganjurkan Anda untuk menggunakan has_many: through daripada habtm (lebih lanjut tentang ini di sini ), jadi Anda akan mendapatkan sesuatu seperti:
Setelah ini, Anda akan memiliki has_banyak pengaitan di kedua sisi dan dapat menetapkannya di factory_girl seperti yang Anda lakukan.
sumber
Employment belongs_to :user
danEmployment belongs_to :company
dengan model gabungan yang menghubungkan satu Perusahaan dengan satu Pengguna?Pembaruan untuk Rails 5:
Alih-alih menggunakan
has_and_belongs_to_many
asosiasi, Anda harus mempertimbangkan:has_many :through
asosiasi.Pabrik pengguna untuk asosiasi ini terlihat seperti ini:
Anda dapat membuat pabrik perusahaan dengan cara yang sama.
Setelah kedua pabrik ditetapkan, Anda dapat membuatnya
user_with_companies
pabrik dengancompanies_count option
. Di sini Anda dapat menentukan berapa banyak perusahaan milik pengguna:create(:user_with_companies, companies_count: 15)
Anda dapat menemukan penjelasan detail tentang asosiasi gadis pabrik di sini .
sumber
Untuk HABTM saya menggunakan sifat dan panggilan balik .
Katakanlah Anda memiliki model berikut:
Anda dapat menentukan Pabrik di atas :
sumber
Anda dapat menentukan pabrik baru dan menggunakan panggilan balik (: create) untuk membuat daftar asosiasi. Mari kita lihat bagaimana melakukannya dalam contoh ini:
Atribut company_count adalah sementara dan tersedia di atribut pabrik dan di callback melalui evaluator. Sekarang, Anda dapat membuat pengguna dengan perusahaan dengan opsi untuk menentukan berapa banyak perusahaan yang Anda inginkan:
sumber