gpt4 book ai didi

ruby-on-rails - 我在 Factory Girl 中使用序列来获取唯一值,但出现验证错误

转载 作者:行者123 更新时间:2023-12-04 11:31:54 24 4
gpt4 key购买 nike

我有一个以这种方式定义的模型

class Lga < ActiveRecord::Base
validates_uniqueness_of :code
validates_presence_of :name
end

我已经为 Lgas 定义了一个工厂
Factory.sequence(:lga_id) { |n| n + 10000 }

Factory.define :lga do |l|
id = Factory.next :lga_id
l.code "lga_#{id}"
l.name "LGA #{id}"
end

然而,当我跑
Factory.create(:lga)
Factory.create(:lga)

script/console我得到
>> Factory.create(:lga)
=> #<Lga id: 2, code: "lga_10001", name: "LGA 10001", created_at: "2010-03-18 23:55:29", updated_at: "2010-03-18 23:55:29">
>> Factory.create(:lga)
ActiveRecord::RecordInvalid: Validation failed: Code has already been taken

最佳答案

问题是 codename属性不是所谓的惰性属性。我曾想过写一些类似的东西:

Factory.define :lga do |l|
l.code { |n| "lga_#{n+10000}" }
end

但我想重用 name 中的 id属性也。你可以确保
id每次都被评估 Factory.create通过将其放入 after_build 来调用钩。
Factory.define :lga do |l|
l.after_build do |lga|
id = Factory.next :lga_id
lga.code = "lga_#{id}"
lga.name = "LGA #{id}"
end
end

这仅适用于 FactoryGirl 1.2.3 及更高版本。

关于ruby-on-rails - 我在 Factory Girl 中使用序列来获取唯一值,但出现验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2474158/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com