2015-04-08 46 views
0

我試着在軌實現基於數據庫的序列生成器,所以我寫了那張像活動記錄從工廠女孩找到

@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

你知道軌道默認情況下使用序列的ID?但是如果你需要一個「額外的」獨特的價值,基於另一個序列,並且這個代碼在你的模型中,由'before_create'觸發,工廠女孩應該只使用它並且工作。 – nathanvda

回答

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 

那麼,在之前(:所有)我叫create()方法

before(:all) do 
    # create the sequences 
    create(:membership_sequence) 
    create(:payment_sequence) 
end 

,瞧! Sequence.find_by_name現在可以工作。

要回答你的問題,爲什麼我選擇手動執行序列生成比使用Rails的活動記錄自動生成的ID,這是因爲我希望能夠產生如PREFIX-2015-0001,PREFIX-2016-0001序列