Rspec - 在保存之前创建has_many记录

时间:2016-02-27 21:49:05

标签: ruby-on-rails ruby rspec associations

我正忙着尝试建立测试所需的关系。 我们有一所有很多校园的学校。

class School
  has_many :campus
  ....
  validates :campus, presence: true

虽然没有地图表,但是校园里有school_id:

class Campus
  belongs_to :school

现在我有鸡蛋和鸡肉的情况。

  school = School.new(name: "Hogwarts")
  campus = Campus.create(name: 'Griffendor', country_code: 7, school_id: school)
  school.save!

在我有一些校园之前我不能创建一所学校,而且我不能为校园创建一个school_id,因为学校还没有保存。

我尝试在创建过程中为学校指定一个id,但它会忽略它并保存下一个可用的id。该系统正在使用Rspec,但我的生活中没有使用FactoryGirl。

这种情况有快速解决方法吗?

3 个答案:

答案 0 :(得分:1)

我很困惑。从docs可以看出,包含has_many调用的类不是具有外键的类。

From the Active Record Guide

但你有:

class School
  has_many :campus
  ...

  validates :campus, presence: true
end

你认为你在学校做什么验证?我相信你在错误的地方拥有它,这是你心痛和悲伤的根源。所以,将validates:移到校园。这应该允许你这样做:

  school = School.create(name: "Hogwarts")

看看是否有诀窍。

答案 1 :(得分:1)

删除第validates :campus, presence: true

学校班级必须是:

class School
  has_many :campus
  ....

答案 2 :(得分:0)

试试:

school = School.new(name: "Hogwarts")
campus = school.campus.build(name: 'Griffendor', country_code: 7)
school.save!
campus.save! # Not sure if it's necessary; you could also declare: has_many :campus, autosave: true