Ruby on rails 声明:工厂中有多个关联的子项(datamapper)

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

我在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 :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
。正如我从你的模型中看到的,每次转账可以有不同的账户。