相关疑难解决方法(0)

在Rails中使用具有唯一约束的关联的factory_girl.获得重复的错误

我正在使用Rails 2.2项目来更新它.我正在用工厂替换现有的灯具(使用factory_girl)并且遇到了一些问题.问题在于表示具有查找数据的表的模型.当我创建一个包含两个具有相同产品类型的产品的购物车时,每个创建的产品都会重新创建相同的产品类型.这是ProductType模型上唯一验证的错误.

问题演示

这是一个单元测试,我创建一个Cart并将它们组合在一起.我不得不这样做以解决问题.但这仍然证明了这个问题.我会解释一下.

cart = Factory(:cart)
cart.cart_items = [Factory(:cart_item, 
                           :cart => cart, 
                           :product => Factory(:added_users_product)),
                   Factory(:cart_item, 
                           :cart => cart, 
                           :product => Factory(:added_profiles_product))]
Run Code Online (Sandbox Code Playgroud)

添加的两个产品属于同一类型,每个产品创建时都会重新创建产品类型并创建重复项.

生成的错误是:"ActiveRecord :: RecordInvalid:验证失败:名称已被占用,代码已被占用"

解决方法

此示例的解决方法是覆盖正在使用的产品类型并传入特定实例,因此只使用一个实例."add_product_type"提前获取并传入每个购物车项目.

cart = Factory(:cart)
prod_type = Factory(:add_product_type)   #New
cart.cart_items = [Factory(:cart_item,
                           :cart => cart,
                           :product => Factory(:added_users_product,
                                               :product_type => prod_type)), #New
                   Factory(:cart_item,
                           :cart => cart,
                           :product => Factory(:added_profiles_product,
                                               :product_type => prod_type))] #New
Run Code Online (Sandbox Code Playgroud)

使用factory_girl与"pick-list"类型的关联的最佳方法是什么?

喜欢为厂家定义为包含,而不必进行组装测试的一切,虽然我可以住在一起.

背景和额外细节

工厂/ product.rb

# Declare ProductTypes

Factory.define :product_type do |t|
  t.name "None"
  t.code "none"
end …
Run Code Online (Sandbox Code Playgroud)

ruby unit-testing ruby-on-rails fixtures factory-bot

40
推荐指数
2
解决办法
1万
查看次数