Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 在before(:create)回调中使用临时属性_Ruby_Factory Bot - Fatal编程技术网

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的一个令人困惑的方面是,相同的方法可以视为属性或关联,具体取决于参数的数量或块的存在