首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何为相互验证的模型编写工厂?

如何为相互验证的模型编写工厂?
EN

Stack Overflow用户
提问于 2015-05-15 18:23:57
回答 2查看 128关注 0票数 0

家长班:

代码语言:javascript
运行
AI代码解释
复制
class Parent < ActiveRecord::Base
  has_many :kids
  validates_presence_of :kids
end

儿童班:

代码语言:javascript
运行
AI代码解释
复制
class Kid < ActiveRecord::Base
  belongs_to :parent, inverse_of: :kids
  validates :parent, presence: true
end

母厂:

代码语言:javascript
运行
AI代码解释
复制
FactoryGirl.define do
  factory :parent do
    2.times do
      parent.kids << FactoryGirl.create(:kid)
    end
  end
end

儿童工厂:

代码语言:javascript
运行
AI代码解释
复制
FactoryGirl.define do
  factory :kid do
    parent
  end
end

此配置将导致无限循环。我已经尝试过FactoryGirl.build、FactoryGirl.create、after(:build)、create(:create)、关联、构建第二个虚拟工厂等的每一个组合。

写这些工厂的最好方法是什么?我犯了个愚蠢的错误吗?

似乎其他人也经历过这个问题:of.html

Ruby2.2.1,Rails 4.1.5,rspec 3.0.2,factory_girl_rails 4.4.1。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-19 14:37:12

对于我的用例,这是有效的:

母厂:

代码语言:javascript
运行
AI代码解释
复制
FactoryGirl.define do
  factory :parent do
    2.times do
      parent.kids << FactoryGirl.create(:kid)
    end
  end
end

儿童工厂:

代码语言:javascript
运行
AI代码解释
复制
FactoryGirl.define do
  factory :kid do
    parent {Owner.new}
  end
end

此模式只需向Kid工厂分配一个新的未使用的所有者对象(以通过验证)。因为父母has_many孩子和孩子可以有很多父母,所以在调用任何一个工厂时没有冲突。在您的规范中,您可以覆盖默认关联来测试所需的行为。

实际上,如果其中一个模型没有经过太多测试,您也不能为其中一个模型创建工厂;您必须为每个规范创建模型的“新”实例,如果这是常见的情况,这是不理想的。

希望这能帮到别人!

票数 0
EN

Stack Overflow用户

发布于 2015-05-15 19:03:13

你贴的那一页的答案其实很好,所以我在这里引用它。

你真的不能这么做。使用钩子的建议也是有限的。

如果您需要构建对象层次结构,其中对象之间存在验证规则,那么您将遇到inverse_of与belongs_to关联的问题。 如果对象层次结构完全在内存中构建,然后通过最顶层的祖先保存,ActiveRecord通常能够正确地保存对象层次结构。在某些情况下,您可以通过使用Factory.build并在工厂定义中添加after_build挂钩来设置依赖对象来模拟这种行为。这在多个层次结构中并不能很好地工作。 最后的方法是设置您自己的助手方法,并在内存中构造对象层次结构,分配依赖项,然后调用顶层父级的保存。它不像工厂调用那样优雅,但它可以帮助消除一堆设置代码的杂乱,从而绕过Factory和ActiveRecord的怪癖。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30271196

复制
相关文章
JS如何为表单聚焦控件设置醒目的样式
在用户填写表单时,为了让用户集中精力填写或某一个表单控件,可以通过设置此空间的样式来达到目的
itclanCoder
2023/02/26
7.3K0
JS如何为表单聚焦控件设置醒目的样式
web前端之锋利的jQuery八:jQuery插件的使用(表单验证、表单提交)
插件也称扩展,是一种遵循一定规范的应用程序接口编写出来的程序。 1.jQuery表单验证插件-Validation: 最常使用JavaScript的场合就是表单的验证,而jQuery作为一个优秀的JavaScript库,也提供了一个优秀的表单验证插件-Validation,其拥有以下优点: 内置验证规则:拥有必填、数字、email、URL和信用卡号等19类内置验证规则。 自定义验证规则:可以很方便地自定义验证规则 简单强大的验证信息提示:默认了验证信息提示,并提供自定义覆盖默认提示信息的功能 实时
Java帮帮
2018/03/16
6.7K0
表单常用的控件有哪些_html表单控件样式修改
  readonly属性规定输入字段为只读(不能修改); readonly属性不需要值,它等同于readonly=“readonly”。
全栈程序员站长
2022/09/20
3.9K0
jquery上传控件uploadify使用备忘
我简单修改了js和样式,效果如下 使用起来也是超简单,将文件下载并解压到你网站目录下,然后 1、在使用位置插入代码 ============================= <iframe wid
冰封一夏
2019/09/11
9960
使用jQuery Validation插件来验证表单
jQuery Validation是一个用于验证表单的jQuery插件,简单易用,已经包含了16种内置的验证规则.Github上也有更多的验证规则可以使用.这都不是重点,重点是你可以轻松的定制自己的规则. 内置规则: required – Makes the element required. remote – Requests a resource to check the element for validity. minlength – Makes the element require a give
宅蓝三木
2018/02/07
2.1K0
使用jQuery Validation插件来验证表单
jquery 表单验证
("form :input.required").each(function(){
用户5760343
2019/10/10
3.6K0
jquery 表单验证
[WPF自定义控件库]简单的表单布局控件
在WPF中布局表单一直都很传统,例如使用上面的XAML,它通过Grid布局一个表单。这样出来的结果整整齐齐,看上去没什么问题,但当系统里有几十个表单页以后需要统一将标签改为上对齐,或者标签和控件中加一个:号等需求都会难倒开发人员。一个好的做法是使用某些控件库提供的表单控件;如果不想引入一个这么“重”的东西,可以自己定义一个简单的表单控件。
dino.c
2019/06/03
2.5K0
jquery 表单事件
.blur()    当元素失去焦点的时候触发事件。   .blur(handler(eventObject))     handler(eventObject)       每当事件触发时候执行的函数。   .blur([eventData],handler(eventObject))     eventData       一个对象,它包含的数据键值对映射将被传递给事件处理程序。     handler(eventObject)       每当事件
用户1197315
2018/01/19
1.6K0
bootstrap 表单控件
<form role="form"> <div class="checkbox"> <label>
用户5760343
2019/07/07
1.2K0
【实现】表单控件里的子控件的变化。
     上一篇说的是表单布局上的变化,也就是通过TR、TD的设置,实现了多行多列的效果。那么格子画好了,我们 可以往里面放控件了。上次都是用的文本框,这个显然是不行的,还要扩大这个范围。      这个控件的范围就比较大了,不光是TextBox、DropDownList,还有HTM编辑器这类的,都是可能会往里面放的,当然象GridView这样的就先不考虑了。另外还要可以扩展,可以随时增加新的子控件。      那么控件得类型这么多,要如何控制呢?第一用基类,第二用接口。      基类是.net Fram
用户1174620
2018/02/26
1.7K0
【实现】表单控件里的子控件的变化。
表单输入框聚焦效果
css 代码,当然你使用类选择器也是可以的,这里我使用了 css 的属性选择器 关于选择器的优先级,可自行尝试测试:
itclanCoder
2020/10/28
1.5K0
表单输入框聚焦效果
表单控件的副产品——查询控件
查询控件     当初在写表单控件的时候,突然想到,这个表单控件稍微修改一下不就是一个查询控件了吗?     那么查询控件需要做的什么事情呢?          1、自己描绘控件,比如能够自己添加文本框、下拉列表框这一类的控件。          2、可以自己获取用户输入的信息,根据查询方式组合where 后面的 SQL语句 。     是不是和表单控件很像呢?     在表单控件的SaveData()里面我们可以得到字段名称和对应的用户输入的信息,那么我们就可以写成这种方式。         
用户1174620
2018/02/07
1.1K0
第83天:jQuery中操作form表单
注意:checked、selected、disabled要使用.prop()方法。
半指温柔乐
2018/09/11
9140
macOS 中 聚焦搜索 的使用教程
macOS中的聚焦搜索是一个强大的工具,它可以帮助你快速找到文件、应用程序、联系人、电子邮件、互联网搜索结果等。
Alice_sa
2023/09/14
7100
VBA表单控件(三)
大家好,上节演示了数值调节钮和滚动条的小示例,本节开始介绍单选框、分组框和复选框控件的内容。
无言之月
2019/10/13
4.7K0
bootstrap 表单控件大小
<form role="form"> <div class="form-group"> <input class="form-control input-lg" type="text" placeholder=".input-lg"> </div> <div class="form-group"> <input class="form-control" type="text" placeholder="默认输入"> </div> <div class="form-group"> <input class="form-control input-sm" type="text" placeholder=".input-sm"> </div> <div class="form-group"></div> <div class="form-group"> <select class="form-control input-lg"> <option value="">.input-lg</option> </select> </div> <div class="form-group"> <select class="form-control"> <option value="">默认选择</option> </select> </div> <div class="form-group"> <select class="form-control input-sm"> <option value="">.input-sm</option> </select> </div> <div class="row"> <div class="col-lg-2"> <input type="text" class="form-control" placeholder=".col-lg-2"> </div> <div class="col-lg-3"> <input type="text" class="form-control" placeholder=".col-lg-3"> </div> <div class="col-lg-4"> <input type="text" class="form-control" placeholder=".col-lg-4"> </div> </div> </form>
用户5760343
2019/07/07
1.2K0
JQuery表格表单操作
1、多选框应用代码示例 <form action=”#” method=”post”> 你喜欢的明星是?<br /> <input type=”checkbox” name=”boxs” value=”张嘉译” id=”1″ /><label for=”1″>张嘉译</label> <input type=”checkbox” name=”boxs” value=”周润发” id=”2″ /><label for=”2″>周润发</label> <input type=”checkbox” name=”bo
苦咖啡
2018/05/07
1.5K0
VBA表单控件(一)
大家好,Excel中的控件是放置在窗体的一些图形对象,可以用来显示、输入数据或者执行操作等。包括命令按钮、数值调节钮文本框、列表框、单选框、复选框等。
无言之月
2019/10/13
5.1K0
Jquery 异步提交表单
前台部分代码: <div id='error'></div><!--错误提示信息--> <input type='text' id='username' name='username' readonly='Readonly'/><!--readonly为只读--> <input type='password' id='password' name='password'> <input type='text' id='company' name='company'> <input type='text'
用户1503405
2021/09/23
3K0
jquery 操作表单表格
$("tr:contains('王五')").addClass("selected")
用户5760343
2019/10/08
1.5K0
jquery 操作表单表格

相似问题

jQuery模式自动聚焦第一个表单域

13

Symfony表单验证名称为‘’的无效表单控件不可聚焦

18

TinyMCE - name='content‘的无效表单控件不可聚焦

15

使用jquery同时聚焦和(聚焦)

35

自动聚焦jquery弹出窗口中表单的第一个元素

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文