首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在a(:create)回调中使用瞬态属性

在a(:create)回调中使用瞬态属性
EN

Stack Overflow用户
提问于 2016-05-14 19:48:53
回答 1查看 913关注 0票数 0

我是新来的工厂女工。我希望创建一个共享工厂,它既属于成员工厂,也属于股份工厂(这样,两者都与同一个Group实例有关联)。我试图按照下面的方式编写我的共享工厂,而不是使用关联方法来避免创建共享的回调。

代码语言:javascript
复制
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

然后,我想创建这样的分享:

代码语言:javascript
复制
share = create(:share, same_group: create(:group))

我收到一个错误,说'same_group‘特征没有注册。当我创建一个特性,或者用这个名称在Group下创建一个工厂时,它会抱怨对于构建的共享实例没有'group=‘setter方法。

我很困惑,因为看起来factory_girl试图将我的临时属性作为共享的实际属性来处理,而我不想这样做。我只想让same_group成为一个组实例的变量,我可以把它传递给the (:create)块。我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-14 20:04:13

在没有默认值的情况下定义same_group会使工厂女孩将其视为关联而不是属性(并试图查找同名工厂)。将这一行改为例如same_group nil可以解决这个问题。同样的方法可以根据参数的数量或块的存在程度被视为属性或关联,这是工厂女孩公认的一个令人困惑的方面。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37231140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档