使用 Rails3,令人敬畏的 FactoryGirl gem 有一个方法 create_list,它接受一个策略、多次,然后是一个值的哈希值传递到策略中。(从https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md复制)
twenty_year_olds = FactoryGirl.create_list(:user, 25, date_of_birth: 20.years.ago)
假设我不想传递“20.years.ago”,而是传递一个 lambda(或 Proc),每次读取该变量时都会执行一次。这在 Ruby 或 FactoryGirl 中是否可行,或者 FactoryGirl 是否必须检查每个参数以查看它是否是 lambda。
dob_dynamic = -> { random_dob some_param }
twenty_year_olds = FactoryGirl.create_list(:user, 25, date_of_birth: dob_dynamic )
当我做这样的事情时,我得到了:
raise ActiveRecord::AssociationTypeMismatch, message, Object expected, got Proc
我通过执行以下操作解决了这个问题:
# pass i, b/c times always passes index to proc
# dob_dynamic.() invokes dob_dynamic
create_user = -> i { create :user, date_of_birth: dob_dynamic.() }
25.times &create_user
有没有更好的方法来做到这一点?