Ruby 在before(:create)回调中使用临时属性
我是新来的工厂女孩。我想创建一个共享工厂,它同时属于成员资格工厂和利害关系工厂(以便两者都与同一个组实例关联)。我试图按照如下方式编写共享工厂,而不是使用关联方法来避免可能创建共享的回调Ruby 在before(:create)回调中使用临时属性,ruby,factory-bot,Ruby,Factory Bot,我是新来的工厂女孩。我想创建一个共享工厂,它同时属于成员资格工厂和利害关系工厂(以便两者都与同一个组实例关联)。我试图按照如下方式编写共享工厂,而不是使用关联方法来避免可能创建共享的回调 factory :share do transient do same_group end before(:create) do |share, evaluator| stake = create(:shareless_stake, group: evaluator.same_gr
factory :share do
transient do
same_group
end
before(:create) do |share, evaluator|
stake = create(:shareless_stake, group: evaluator.same_group)
member = create(:shareless_membership, group: evaluator.same_group)
share.stake = stake
share.membership = member
end
end
然后我想创建如下共享:
share = create(:share, same_group: create(:group))
我得到一个错误,说“同一组”的特质没有注册。当我创建一个trait,或者在组工厂下以该名称创建工厂时,它会抱怨Share的构建实例没有“Group=”setter方法
我很困惑,因为工厂女孩似乎试图将我的暂时属性视为共享的实际属性,这是我不想要的。我只想将同一个组作为组实例的变量,我可以将其传递到before(:create)块。我做错了什么 在没有默认值的情况下定义
same_group
会导致Factory Girl将其视为关联而不是属性(并尝试查找同名工厂)。将此行更改为例如相同组nil
将解决该问题。Factory Girl的一个令人困惑的方面是,相同的方法可以视为属性或关联,具体取决于参数的数量或块的存在。定义相同的组
而不使用默认值会导致Factory Girl将其视为关联而不是属性(并尝试查找同名工厂)。将此行更改为例如same_group nil
将解决该问题。factory Girl的一个令人困惑的方面是,相同的方法可以视为属性或关联,具体取决于参数的数量或块的存在