Ruby on rails 声明:工厂中有多个关联的子项(datamapper)
我在ror应用程序中使用datamapper和postgres,在我的模型中,我有这样的关联:Ruby on rails 声明:工厂中有多个关联的子项(datamapper),ruby-on-rails,rspec,datamapper,factory-bot,Ruby On Rails,Rspec,Datamapper,Factory Bot,我在ror应用程序中使用datamapper和postgres,在我的模型中,我有这样的关联: #/models/account.rb has n, :transfers_out, "Transfer", :child_key => [ :account_from_id ] has n, :transfers_in, "Transfer", :child_key => [ :account_to_id ] #/models/transfer.rb belongs_to
#/models/account.rb
has n, :transfers_out, "Transfer", :child_key => [ :account_from_id ]
has n, :transfers_in, "Transfer", :child_key => [ :account_to_id ]
#/models/transfer.rb
belongs_to :account_from, "Account", :child_key => [:account_from_id], :required => true
belongs_to :account_to, "Account", :child_key => [:account_to_id], :required => false
现在我需要使用factory girl在rspec中进行测试。所以,我写了这个:
#/factories/account.rb
Factory.define :account do |f|
f.transfers_out {|transfer| [transfer.association(:transfer)]}
f.transfers_in {|transfer| [transfer.association(:transfer)]}
f.amount "0"
end
Factory.define :account_big, :class => :account do |f|
f.name "MyMillionDollarPresent"
f.amount "10000"
end
Factory.define :account_small, :class => :account do |f|
f.name "PoorHomo"
f.amount "100"
end
小转运厂
Factory.define :transfer do |f|
f.id "1"
f.comment "payment"
f.status "proposed"
f.amount "0"
end
因此,我尝试了测试从帐户转账的创建:
describe Transfer do
before(:each) do
@account_big = Factory(:account_big)
@account_small = Factory(:account_small)
@transfer = Factory(:transfer)
end
it "should debit buyer" do
@buyer = @account_big
@buyer.transfers_out = @transfer
@transfer.amount = 3000
@buyer.amount -= @transfer.amount
@buyer.amount.should == 7000
end
但这导致我的测试失败:
1) Transfer should debit buyer
Failure/Error: @buyer.transfers_out = @transfer
TypeError:
can't convert Transfer into Array
# ./spec/models/transfer_spec.rb:15:in `block (2 levels) in <top (required)>'
1)转账应记入买方借方
失败/错误:@buyer.transfers\u out=@transfer
类型错误:
无法将传输转换为数组
#./spec/models/transfer_spec.rb:15:in'block(2层)in'
Soo,在这种情况下,我应该怎么做,如何声明与子密钥的关联?我会感谢你的帮助
@buyer.transfers\u out
是一个数组,@transfer
是单个对象。如果你想用一个元素制作一个数组,你应该使用@buyer.transfers\u out=[@transfer]
或者类似的@buyer.transfers\u out的东西你有没有试过f.transfers\u out工厂(:transfer)?但是如果我需要调用@account=transfer.account\u from
,我应该如何确定这个“属于”工厂中的关联?如果需要一组帐户,可以调用@accounts=transfers.map{t|t.account_from}.uniq
。正如我从你的模型中看到的,每次转账可以有不同的账户。