Я использую последовательность в Девочке Фабрики для получения уникальных значений, но я получаю ошибки проверки

У меня есть модель, определил этот путь

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
7
задан Veger 19 March 2010 в 17:53
поделиться

1 ответ

Проблема была в том, что атрибуты code и name не были так называемыми ленивыми атрибутами. Я думал написать что-то вроде:

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

но я хотел повторно использовать id в атрибуте name. Вы можете сделать так. чем 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 и выше.

7
ответ дан 7 December 2019 в 03:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: