gpt4 book ai didi

ruby-on-rails-3 - rails 3 - FactoryGirl 创建关联记录

转载 作者:行者123 更新时间:2023-12-04 06:58:29 25 4
gpt4 key购买 nike

我正在尝试创建一些测试数据来填充我的表格,以便我可以在我的网站上测试功能。

有问题的表是:songs , song_arrangements , 和 song_arrangement_files .以这种方式关联。

Songs:
has_many :song_arrangements, :dependent => :destroy
has_many :song_arrangement_files, :through => :song_arrangements

Song Arrangements:
belongs_to :song
has_many :song_arrangement_files, :dependent => :destroy

Song Arrangement Files:
belongs_to :song
belongs_to :song_arrangement

我已经能够使用以下代码使用 FactoryGirl 创建 25 首歌曲:
Code in my spec file:
before { FactoryGirl.create_list(:song, 25) }

Code in the factory:
FactoryGirl.define do
factory :song do |s|
s.sequence(:title) { |n| "Song Title #{n}" }
s.sequence(:artist) { |n| "Song Artist #{n}" }
end
end

关于如何创建的任何想法 song_arrangementssong_arrangement_files与它们各自的 song_arrangement 正确关联或 song记录?

我猜我可以用 after(:create)以某种方式嵌套在我的工厂中。我对 FactoryGirl 很陌生,对 Rails 还是很陌生。任何帮助深表感谢!

最佳答案

所以我的另一个答案帮助我做我需要做的事情;然而,我基本上需要更深入一层关联,而我正在用该解决方案撞墙。我结束了重新阅读有关协会的 FactoryGirl 文档,并提出了适用于我所有情况的解决方案。它创建歌曲、song_arrangements 和 song_arrangement_files。我确信代码不是很漂亮,但它可以工作并且可以在以后改进。希望这可以帮助任何遇到相同类型障碍的人。

FactoryGirl.define do
factory :song do |s|
s.sequence(:title) { |n| "Song Title #{n}" }
s.sequence(:artist) { |n| "Song Artist #{n}" }

factory :song_with_song_arrangements do
ignore do
song_arrangements_count 100
end

after(:create) do |song, evaluator|
FactoryGirl.create_list(:song_arrangement, evaluator.song_arrangements_count, song: song)
end
end
end

factory :song_arrangement do |sa|
song

sa.sequence(:title) { |n| "Arrangement #{n}" }
original_key 'A'
bpm 75
sa.sequence(:chart_content) { |n| "This is the chart content for Arrangement #{n}." }
chart_mapping 'V1, C, V2, C, B, C, C'
sa.sequence(:notes) { |n| "These are notes for the Arrangement #{n}." }

factory :song_arrangement_with_song_arrangement_files do
ignore do
song_arrangement_files_count 100
end

after(:create) do |song_arrangement, evaluator|
FactoryGirl.create_list(:song_arrangement_file, evaluator.song_arrangement_files_count, song_arrangement: song_arrangement)
end
end
end

factory :song_arrangement_file do |saf|
song_arrangement
song

saf.sequence(:title) { |n| "Attachment #{n}" }
url 'http://www.google.com'
saf.sequence(:description) { |n| "This is the description of Attachment #{n}." }
end
end

用于调用这些工厂的代码:
Songs:
before(:each) { FactoryGirl.create_list(:song, 25) }
Song Arrangements:
before(:each) { FactoryGirl.create(:song_with_song_arrangements) }
Song Arrangement Files:
before(:each) { FactoryGirl.create(:song_arrangement_with_song_arrangement_files) }

关于ruby-on-rails-3 - rails 3 - FactoryGirl 创建关联记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14220645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com