工厂女孩生成两个变量但 RecordNotUnique

Factory girl generate two variables but RecordNotUnique

我有一个User模型class,我想生成两个实例变量来做一些测试。

let (:user) {FactoryGirl.create :user,:with_events}
let (:user1) {FactoryGirl.create :user,:with_events}

但是我得到了错误:

ActiveRecord::RecordNotUnique:
       Mysql2::Error: Duplicate entry 'AlBw1S27GE6wQIgzHM2TmZxSaHXLbhuQIg08NyI98Cg' for key 'index_users_on_access_token': INSERT INTO `users` 



I checked AlBw1S27GE6wQIgzHM2TmZxSaHXLbhuQIg08NyI98Cg is user1's access_token already. But why did user1 use the same **access_token**?

SecureRandom.urlsafe_base64(32) 似乎只调用了一次?为什么 access_token 不是唯一的?

PS:

factories.rb

FactoryGirl.define do |f|

  factory :user do
    password      "123123"
    sequence(:name){|n| "张三#{n}" }
    access_token  SecureRandom.urlsafe_base64(32)
    expired       Time.now + FSpace::USER_TOKEN_EXPIRED_TIMES
  end

  factory :event do 
    end_date      "2015-05-30"
    is_countdown  "1"
    start_date    "2015-03-17"
    sequence(:name){|n| "我的生日#{n}" }
  end


  trait :with_events do
    after :create do |user|
      FactoryGirl.create_list :event, 3, :user => user
    end
  end
end

使用您使用的语法,

access_token SecureRandom.urlsafe_base64(32)

该值仅在定义工厂时计算一次。

如果您希望每次使用工厂时都计算该值,那么您需要使用基于块的语法。

access_token { SecureRandom.urlsafe_base64(32) }

在文档中他们称之为 lazy attributes