我试图在rails中实现一个基于数据库的序列生成器,所以我编写了类似
的代码@semaphore.synchronize {
seq = Sequence.find_by_name(type)
seq.value += 1
seq.save
val = seq.value
unless prefix.nil?
"#{prefix}-#{val}"
else
"#{val}"
end
}
我的问题是,是否可以使用工厂女孩设置初始序列数据并能够使用Sequence.find_by_name访问它或者夹具加载是我唯一的选择?即rake db:fixtures:load RAILS_ENV=test FIXTURES_PATH=spec/fixtures
?
由于
答案 0 :(得分:0)
好的,我能找到答案。
我在工厂女孩中创建了我的序列定义,如下所示:
FactoryGirl.define do
factory :membership_sequence, class: Sequence do
name 'membership'
value 1
end
factory :payment_sequence, class: Sequence do
name 'payment'
value 1
end
end
然后,在before(:all)中我调用了create()方法
before(:all) do
# create the sequences
create(:membership_sequence)
create(:payment_sequence)
end
瞧,瞧! Sequence.find_by_name现在可以正常工作。
回答你的问题为什么我选择手动实现序列生成而不是使用rails active record autogenerated id,这是因为我希望能够生成序列,如PREFIX-2015-0001,PREFIX-2016-0001