首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rspec -在保存之前创建has_many记录

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

Stack Overflow用户
提问于 2016-02-28 05:49:05
回答 3查看 186关注 0票数 0

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

代码语言:javascript
复制
class School
  has_many :campus
  ....
  validates :campus, presence: true

虽然没有映射表,但园区有school_id:

代码语言:javascript
复制
class Campus
  belongs_to :school

现在我遇到了一个鸡蛋和鸡的问题。

代码语言:javascript
复制
  school = School.new(name: "Hogwarts")
  campus = Campus.create(name: 'Griffendor', country_code: 7, school_id: school)
  school.save!

我不能创建一所学校,除非我有一些校园,而且我不能为校园创建school_id,因为学校还没有保存。

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

对于这种情况,有没有快速解决的办法?

EN

回答 3

Stack Overflow用户

发布于 2016-02-28 06:48:10

我真的很困惑。正如您从docs中看到的,包含has_many调用的类不是具有外键的类。

但是你有:

代码语言:javascript
复制
class School
  has_many :campus
  ...

  validates :campus, presence: true
end

你认为你在学校验证的是什么?我相信你把它放在了错误的地方,这是你心痛和悲伤的根源。所以,把validates:搬到校园去吧。这将允许您执行以下操作:

代码语言:javascript
复制
  school = School.create(name: "Hogwarts")

看看能不能奏效。

票数 1
EN

Stack Overflow用户

发布于 2016-02-28 07:01:20

删除行validates :campus, presence: true

学校班级必须是:

代码语言:javascript
复制
class School
  has_many :campus
  ....
票数 1
EN

Stack Overflow用户

发布于 2016-02-28 06:28:51

试一试:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35675852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档