工厂女孩:验证相关的导致未定义的方法有效吗?为零:Nilclass

时间:2015-12-18 08:16:27

标签: ruby-on-rails factory-bot

我的模型Studenthas_one :account

所有与输入相关的数据都存储在帐户内。学生模型只是扮演它在关系中扮演的角色(其他一些模特属于学生)。

问题:我无法与工厂女孩一起测试。

 factory :student do
   end

除了它之外我无法定义任何东西。

@student = FactoryGirl.create(:student)的每次尝试都得到了什么:

undefined method `valid?' for nil:NilClass

任何修复?

附加代码

class Account < ActiveRecord::Base
belongs_to :account_holder, :polymorphic => true
...
end

factory :account do
sequence :name do |n|
  "Name#{n}"
end
  sequence :surname do |n|
    "Surname#{n}"
  end
  sequence :phone do |n|
    "8911222332#{n}"
  end
  sequence :email do |n|
    "somemail#{n}@mail.ru"
  end
  student
end

问题来源

学生有:

validates_associated_extended :account

基本上是常见的validate但是父模型的错误提取。

因此,当FactoryGirl尝试创建学生时,它会验证帐户,即nil

我试过了:

before(:create) {|student| build(:account, :account_holder =>student )}
student factory中的

account factory

association :account_holder, :factory=>:student

但它仍然无效。

1 个答案:

答案 0 :(得分:0)

factory :student do
  after :build do |student|
     student.account << create(:account, :account_holder => student) if student.account_holder.nil?
  end
end

这允许你同时拥有一个有效的学生并指定一个帐户,如果你想强制一个。 我认为FactoryGirl的最新版本甚至允许将其写为延迟属性语法:

factory :student do
  account { create(:account) }
end